您的位置首页  散文杂谈

贪吃蛇代码(贪吃蛇代码C语言)硬核推荐

在标准的C库中函数rand可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAX是stdlib.h 中定义的一个整数,它与系统有关。

贪吃蛇代码(贪吃蛇代码C语言)硬核推荐

 

思路分析:(1)使用该函数首先应在开头包含头文件stdlib.h#include(C++建议使用#include,下同)(2)在标准的C库中函数rand()可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAX是stdlib.h 中定义的一个整数,它与系统有关。

(3)rand()函数没有输入参数,直接通过表达式rand()来引用;例如可以用下面的语句来打印两个随机数:printf(“Random numbers are: %i %i\n”,rand(),rand());

(4)因为rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说C语言的随机并不是真正意义上的随机,有时候也叫伪随机数(5)为了使程序在每次执行时都能生成一个新序列的随机值,我们通常通过为随机数生成器提供一粒新的随机种子。

函数srand()(来自stdlib.h)可以为随机数生成器播散种子只要种子不同rand()函数就会产生不同的随机数序列srand()称为随机数生成器的初始化器修改部分及bug:1.速度值反show函数及操作中的bug

2.源代码注释3.新增最高纪录变量源码展示:(CSDN:Shawn Hou)#include #include #include #include

#include #include #include #define N 25 using namespacestd; int gameover;//游戏失败的值

int x1, y1; // 随机生成食物的坐标 int x,y; int record=0; //当前用户最高纪录 long start; //下面定义贪吃蛇的坐标类classsnake_position

{ public: int x,y; snake_position(){}; void initialize(int &);//坐标初始化 }; snake_position position[(N-2

)*(N-2)+1]; //定义贪吃蛇坐标类数组,有(N-2)*(N-2)个坐标 void snake_position::initialize(int &j) { x = 1; y = j; } //下面定义贪吃蛇的棋盘图

classsnake_map{ private: char s[N][N];//定义贪吃蛇棋盘,包括墙壁 int grade, length; int gamespeed; //前进时间间隔 char direction; 。

// 初始情况下,向右运动 int head,tail;//头和尾 int score;//分数 bool gameauto; public: snake_map(int h=4,int t=1,int l=

4,char d=77,int s=0):length(l),direction(d),head(h),tail(t),score(s){} void initialize(); //初始化函数 void show_game(); int updata_game(); void setpoint(); void getgrade(); void display(); };

//定义初始化函数,将贪吃蛇的棋盘图进行初始化 void snake_map::initialize() { int i,j; for(i=1;i<=3;i++) s[1][i] = *; s[1][4

] = #; for(i=1;i<=N-2;i++) for(j=1;j<=N-2;j++) s[i][j]=; // 初始化贪吃蛇棋盘中间空白部分for(i=0;i<=N-1;i++) s[0][i] = s[N

-1][i] = +; //初始化贪吃蛇棋盘上下墙壁for(i=1;i<=N-2;i++) s[i][0] = s[i][N-1] = +; //初始化贪吃蛇棋盘左右墙壁 } //============================================

//输出贪吃蛇棋盘信息 void snake_map::show_game() { system("cls"); // 清屏 int i,j; cout << endl; for(i=0;i

\t; for(j=0;j

<< score << "分" ; if(i==10) cout<<"\t最高纪录:"<

) cout << "\t继续:按两下空格键" ; if(i==20) cout<<"\t提示:按住方向键可以加速,分数计算公式为个数*等级" ; if(i==24) cout<<"\t非空格键结束游戏"

; cout<>grade; while( grade>7 || grade<1 ) { cout <<

"请输入数字1-7选择等级" <> grade; } switch(grade) { case1: gamespeed = 1000;gameauto = 0;break; case

2: gamespeed = 800;gameauto = 0;break; case3: gamespeed = 600;gameauto = 0;break; case4: gamespeed =

400;gameauto = 0;break; case5: gamespeed = 200;gameauto = 0;break; case6: gamespeed = 100;gameauto =

0;break; case7: grade = 1;gamespeed = 1000;gameauto = 1;break; } } //输出等级,得分情况以及称号 void snake_map::display() { cout <<

"\n\t\t\t\t等级:" << grade; cout << "\n\n\n\t\t\t\t得分:" << score << "分" ; cout << "\n\n\n\t\t\t\t最高纪录:"

<

0)); do { x1 = rand() % (N-2) + 1; y1 = rand() % (N-2) + 1; }while(s[x1][y1]!=); s[x1][y1]=*; } char key; int snake_map::updata_game() { gameover =

1; key = direction; start = clock(); while((gameover=(clock()-start<=gamespeed))&&!kbhit()); //如果有键按下或时间超过自动前进时间间隔则终止循环

if(gameover) { getch(); key = getch(); } if(key == ) { while(getch()!=){}; //这里实现的是按空格键暂停,按空格键继续的功能,但不知为何原因,

//需要按两下空格才能继续这是个bug } else direction = key; switch(direction) { case72: x= position[head].x-1; y= position[head].y;。

break; // 向上case80: x= position[head].x+1; y= position[head].y;break; // 向下case75: x= position[head].x; y= position[head].y

-1;break; // 向左case77: x= position[head].x; y= position[head].y+1; // 向右 } if(!(direction==72||direction==

80||direction==75 ||direction==77)) // 按键非方向键 gameover = 0; elseif(x==0 || x==N-1 ||y==0 || y==N-1) // 碰到墙壁

gameover = 0; elseif(s[x][y]!=&&!(x==x1&&y==y1)) // 蛇头碰到蛇身 gameover = 0; elseif(x==x1 && y==y1) { // 吃米,长度加1

length ++; if(length>=8 && gameauto) { length -= 8; grade ++; if(gamespeed>=200) gamespeed -= 200; // 改变贪吃蛇前进速度

else gamespeed = 100; } s[x][y]= #; //更新蛇头 s[position[head].x][position[head].y] = *; //吃米后将原先蛇头变为蛇身 head = (head+

1) % ( (N-2)*(N-2) ); //取蛇头坐标 position[head].x = x; position[head].y = y; show_game(); gameover = 1; score += grade*

1; //加分if(snake_map::score>record) record=score; setpoint(); //产生米 } else { // 不吃米 s[position[tail].x][position[tail].y]=;

//将蛇尾置空 tail= (tail+1) % ( (N-2) * (N-2) );//更新蛇尾坐标 s[position[head].x][position[head].y]=*; //将蛇头更为蛇身

head= (head+1) % ( (N-2) * (N-2) ); position[head].x = x; position[head].y = y; s[position[head].x][position[head].y]=

#; //更新蛇头 gameover = 1; } return gameover; } //====================================//主函数部分//====================================

int main() { char ctn = y; int nodead; cout<<"\t\t -----------------------------------------------------"

; cout<<"\n\t\t\t\t 贪吃蛇"<

<

<

; cout<<"\n\t\t -----------------------------------------------------"<

"cls"); snake_map snake; snake.initialize(); cout << "\n\n请选择游戏等级:" << endl; cout << "\n\n\n\t\t\t1.辣鸡:速度 100 \n\n\t\t\t2.菜鸟:速度 200 \n\n\t\t\t 3.入门:速度 400 "

; cout << "\n\n\t\t\t4.中等:速度 600 \n\n\t\t\t5.较快:速度 800 \n\n\t\t\t 6.飞:速度 1000 \n\n\t\t\t7.随机" << endl; snake.getgrade();

//获取等级for(int i=1;i<=4;i++) { position[i].initialize(i);//初始化坐标 } snake.setpoint(); // 产生第一个食物do { snake.show_game(); nodead = snake.updata_game(); }

while(nodead); system("cls"); //清屏 cout<<"\t\t\t -----------------------------------------"; cout <<

"\n\n\n\t\t\t\tGameover!\n\n"<

<

希望对大家有帮助,有什么C/C++学习上的问题也可以来和我交流!写在最后:对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!编程学习书籍分享:

编程学习视频分享:

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!对于C/C++感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!

可以领取一些C/C++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!

免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186