c++贪吃蛇代码(简易版)?简单的js贪吃蛇源代码
其实c++贪吃蛇代码(简易版)的问题并不复杂,但是又很多的朋友都不太了解简单的js贪吃蛇源代码,因此呢,今天小编就来为大家分享c++贪吃蛇代码(简易版)的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!
基于C++的贪吃蛇游戏能运行出来的完整代码有哪些
一个参考实例,在VC++6.0中可以运行成功(可能还有问题)\x0d\x0a\x0d\x0a#include \x0d\x0a#include \x0d\x0a#include \x0d\x0a#include \x0d\x0a#include//使用当前时间做种子;\x0d\x0aenum dir{up,down,left,right};//枚举类型enum dir;\x0d\x0a//围墙;\x0d\x0aclass Fence{\x0d\x0apublic:\x0d\x0a void InitFence();\x0d\x0a void OutputF();\x0d\x0apublic:\x0d\x0a char game[20][20];\x0d\x0a}f;//定义对象;\x0d\x0a//画框框;\x0d\x0avoid Fence::InitFence(){\x0d\x0a for(int i=0; ix=x; q->y=y;\x0d\x0a q->next=head;\x0d\x0a q->prior=NULL;\x0d\x0a if(head) head->prior=q;\x0d\x0a head=q;\x0d\x0a if(!tail) tail=head;\x0d\x0a f.game[x][y]='*';//f对象可以在定义Fence类时定义;且Fence类在SnakeNode类前定义;\x0d\x0a}\x0d\x0aint SnakeNode::get_x(){\x0d\x0a return x;\x0d\x0a}\x0d\x0aint SnakeNode::get_y(){\x0d\x0a return y;\x0d\x0a}\x0d\x0a//删除尾结点;\x0d\x0avoid SnakeNode::delete_tail(){\x0d\x0a SnakeNode*p=tail;\x0d\x0a f.game[tail->get_x()][tail->get_y()]='';//把尾结点的坐标表示的'*'置为空格;\x0d\x0a if(tail==head)\x0d\x0a tail= head= NULL;\x0d\x0a else{\x0d\x0a tail= tail->prior;\x0d\x0a tail->next= NULL;\x0d\x0a}\x0d\x0a delete p;\x0d\x0a}\x0d\x0a//move移动;\x0d\x0aclass move{\x0d\x0apublic:\x0d\x0a dir point;//枚举变量point:控制方向;\x0d\x0a int food_x;\x0d\x0a int food_y;\x0d\x0apublic:\x0d\x0a void moving();\x0d\x0a void change_point(char);//改变方向;\x0d\x0a void get_food();\x0d\x0a};\x0d\x0avoid move::moving(){\x0d\x0a int a,b;\x0d\x0a a= head->get_x();//取得头结点横坐标\x0d\x0a b= head->get_y();//头结点纵坐标\x0d\x0a switch(point){\x0d\x0a case up:--a; break;\x0d\x0a case down:++a; break;\x0d\x0a case left:--b; break;\x0d\x0a case right:++b; break;\x0d\x0a}\x0d\x0a if(a==19||b==19||a==0||b==0){//判断是否撞墙; \x0d\x0a coutadd_head(a,b);\x0d\x0a get_food();\x0d\x0a}\x0d\x0a else{\x0d\x0a head->add_head(a,b);//插入头结点;\x0d\x0a head->delete_tail();//删除尾结点;\x0d\x0a}\x0d\x0a}\x0d\x0avoid move::change_point(char keydown){\x0d\x0a switch(keydown){\x0d\x0a case'w': point= up; break;\x0d\x0a case's': point= down; break;\x0d\x0a case'a': point= left; break;\x0d\x0a case'd': point= right; break;\x0d\x0a}\x0d\x0a}\x0d\x0avoid move::get_food(){\x0d\x0a srand((unsigned int) time(NULL));//做种子(程序运行时间); \x0d\x0a food_x= rand()%18+1; \x0d\x0a food_y= rand()%18+1;\x0d\x0a f.game[food_x][food_y]='*';\x0d\x0a}\x0d\x0a//main();\x0d\x0aint main()\x0d\x0a{\x0d\x0a coutadd_head(4,3);\x0d\x0a head->add_head(4,4);\x0d\x0a head->add_head(4,5);\x0d\x0a m.get_food();\x0d\x0a f.OutputF();\x0d\x0a while(true){\x0d\x0a char keydown= getch();//getch()返回键盘上读取的字符;包含头文件\x0d\x0a m.change_point(keydown);\x0d\x0a while(!kbhit()){//判断有没有按键落下;\x0d\x0a system("cls");//清屏函数;\x0d\x0a m.moving();\x0d\x0a f.OutputF();\x0d\x0a Sleep(200);\x0d\x0a}\x0d\x0a}\x0d\x0a return 0;\x0d\x0a}
谁有用c++写的贪吃蛇源代码分享一个给我吧, 好人一生平安!
游戏描述如下:
1.贪吃蛇可以自动直线前进,或者玩家可以通过方向键操纵贪吃蛇上下左右前进,每次前进一格。
2.贪吃蛇在规定的区域内活动,当:
①贪吃蛇触碰到墙壁时;
②贪吃蛇的蛇头触碰到蛇身或者蛇尾时;
③玩家的键盘输入不是方向键时;
命令行显示“Game Over!”并且退出游戏。
3.贪吃蛇活动的区域内每次随机产生一颗“豆豆”,当贪吃蛇吃到“豆豆”后蛇身增长一格,自动前进时间缩
短100ms(默认是1000ms,且不能少于100ms)。贪吃蛇长度每为8的倍数Improve a Level。
C++代码如下:
#include<bios.h>
#include<conio.h>
#include<dos.h>
#include<graphics.h>
#include<stdlib.h>
#include<time.h>
usingnamespacestd;
inlinevoiddisplay(chargsDomain[][22],intlevel,intmoveSpeed)
{
system("cls");//清屏
cout<<endl<<endl;
for(inti=0;i<22;i++)
{
cout<<"\t";
for(intj=0;j<22;j++)
cout<<gsDomain[i][j]<<"";
if(i==0)
{
cout<<"\tLevel:"<<level;
}
elseif(i==3)
{
cout<<"\t自动前进时间";
}
elseif(i==5)
{
cout<<"\t间隔:"<<moveSpeed<<"ms";
}
cout<<endl;
}
}
intmain()
{
chargsDomain[22][22];//贪吃蛇活动区域(包括墙壁)
//初始化贪吃蛇活动区域(不包括墙壁)
for(inti=1;i<=21;i++)
{
for(intj=1;j<=21;j++)
gsDomain[i][j]='';
}
//初始化贪吃蛇活动区域的上下墙壁
for(inti=0;i<22;i++)
gsDomain[0][i]=gsDomain[21][i]='-';
//初始化贪吃蛇活动区域的左右墙壁
for(inti=1;i<21;i++)
gsDomain[i][0]=gsDomain[i][21]='|';
//初始化蛇身
for(inti=1;i<=3;i++)
gsDomain[1][i]='*';
//初始化蛇头
gsDomain[1][4]='#';
intsnake[2][100];//记录贪吃蛇每次出现的位置的坐标
for(inti=0;i<4;i++)
{
snake[0][i]=1;//记录贪吃蛇所在位置的x坐标
snake[1][i]=i+1;//记录贪吃蛇所在位置的y坐标
}
inthead=3,tail=0,length=4;
intbeanX,beanY;//豆豆出现的位置
srand(time(0));
do
{
beanX=rand()%20+1;
beanY=rand()%20+1;
}while(gsDomain[beanX][beanY]!='');
gsDomain[beanX][beanY]='*';//豆豆
cout<<"
\t\t贪吃蛇游戏即将开始!
";
longstart;
intlevel=1,moveSpeed=1000;
for(inti=3;i>=0;i--)
{
start=clock();
while(clock()-start<=1000){}
system("cls");
if(i)
{
cout<<"
\t\t进入游戏倒计时:"<<i<<endl;
}
else
display(gsDomain,level,moveSpeed);
}
chardirection=77;//贪吃蛇默认自动向右直线前进
while(true)
{
booltimeFlag=true;
intx,y;
start=clock();
//若时间超过自动前进时间或者键盘上有键按下则终止循环
while((timeFlag=(clock()-start<=moveSpeed))&&!kbhit()){}
if(timeFlag)
{
//键盘上有键按下时读取键盘输入
getch();
direction=getch();
}
switch(direction)
{
//向上
case72:x=snake[0][head]-1,y=snake[1][head];
break;
//向下
case80:x=snake[0][head]+1,y=snake[1][head];
break;
//向左
case75:x=snake[0][head],y=snake[1][head]-1;
break;
//向右
case77:x=snake[0][head],y=snake[1][head]+1;
break;
default:cout<<"\tGameOver!
";
return0;
}
if(x==0||x==21||y==0||y==21)
{
//贪吃蛇触碰到墙壁
cout<<"\tGameOver!
";
return0;
}
if(gsDomain[x][y]!=''&&!(x==beanX&&y==beanY))
{
//贪吃蛇的蛇头触碰到蛇身或者蛇尾
cout<<"\tGameOver!
";
return0;
}
if(x==beanX&&y==beanY)
{
//吃豆豆
length++;//长度加1
if(length>=8)
{
//游戏升级处理
length-=8;
level++;
if(moveSpeed>100)
moveSpeed-=100;
}
gsDomain[snake[0][head]][snake[1][head]]='*';
gsDomain[x][y]='#';
head=(head+1)%100;
snake[0][head]=x;
snake[1][head]=y;
do
{
beanX=rand()%20+1;
beanY=rand()%20+1;
}while(gsDomain[beanX][beanY]!='');
gsDomain[beanX][beanY]='*';
display(gsDomain,level,moveSpeed);//屏幕上显示
}
else
{
//不吃豆豆
gsDomain[snake[0][tail]][snake[1][tail]]='';//蛇尾前移一格
tail=(tail+1)%100;
gsDomain[snake[0][head]][snake[1][head]]='*';
head=(head+1)%100;
snake[0][head]=x;
snake[1][head]=y;
gsDomain[x][y]='#';//蛇头前移一格
display(gsDomain,level,moveSpeed);//屏幕上显示
}
}
return0;
}
OK,本文到此结束,希望对大家有所帮助。