上传一个贪吃蛇的代码。
#include<iostream>
#include<windows.h>
#include<conio.h>
#include<ctime>
using namespace std;
#define N 20
int snake1[400][2]; //0 代表x坐标 1代表y坐标
int tail1[2]; //蛇尾
int food[2];
int Dir1 = 0;
int score1=0;
void gotoxy(int x,int y) {//位置函数
COORD pos;
pos.X=2*x; //一个符号两个字符 ,所以横坐标乘2
pos.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void color(int a) {//颜色函数
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
}
void drawfood(int y) {
srand((unsigned)time(NULL));
food[0]=rand()%N+1; //对22取余 保证食物在墙壁之内
food[1]=rand()%N+1;
gotoxy(food[0],food[1]);
color(y);
cout<<"●"<<endl;
}
int main() {
int len1=3;
int i,j;//初始化围墙
int wall[N+2][N+2]={{0}}; //初始化一个22*22的墙
color(11);
for(i=0;i<N+2;i++) {
for(j=0;j<N+2;j++) {
wall[i][j]=1;
if(wall[i][j])
cout<<"■"; //一个符号两个字符
}
cout<<endl;
}
gotoxy(N+2,1); //设置下面的提示语句的位置
cout<<"按w,s,a,d和5,2,1,3控制蛇的方向"<<endl;
char ch;
snake1[0][0]=1; //初始化蛇的位置
snake1[1][0]=1;
snake1[2][0]=1;
snake1[1][1]=1;
snake1[0][1]=1;
snake1[0][2]=1;
for(i=0;i<len1;i++) { //第一条蛇的坐标
gotoxy(snake1[i][0],snake1[i][1]);
color(20);
cout<<"★"<<endl;
}
drawfood(1); //生成食物
while(1) {
// gotoxy(N+2,2);
// cout << snake1[len1-1][1] << endl;
tail1[0]=snake1[len1-1][0]; //蛇尾的横坐标
tail1[1]=snake1[len1-1][1]; //蛇尾的纵坐标
// cout << tail1[1] << endl;
gotoxy(tail1[0],tail1[1]); //
color(11);
cout<<"■"<<endl; //擦除蛇尾运行图像。
for(i=len1-1;i>0;i--) {
snake1[i][0]=snake1[i-1][0]; //每次把蛇头的上一个位置的坐标给蛇头的下下个位置
snake1[i][1]=snake1[i-1][1];
gotoxy(snake1[i][0],snake1[i][1]); //重新构造此时蛇的位置
color(14);
cout<<"★"<<endl;
}
if(kbhit()) { //获取键盘输入的字符
gotoxy(N+3,2); //显示输入字符的位置
ch=getche();
}
switch(Dir1) {
case 5:snake1[0][1]--;break; //表示向上
case 2:snake1[0][1]++;break; //表示向下
case 1:snake1[0][0]--;break; //表示向左
case 3:snake1[0][0]++;break; //表示向右
}
if(Dir1!=5&&ch=='s') //键盘输入s 表示向下
Dir1=2;
else if(Dir1!=2&&ch=='w')
Dir1=5;
else if(Dir1!=1&&ch=='d')
Dir1=3;
else if(Dir1!=3&&ch=='a')
Dir1=1;
gotoxy(snake1[0][0],snake1[0][1]); //此时蛇头的位置
color(14);
cout<<"★"<<endl;
for(int j=0;j<len1;j++) {
if(snake1[j][0]==food[0]&&snake1[j][1]==food[1]) { //当蛇头碰见食物时
len1++; //蛇身加长一
score1++; //分数加一
drawfood(len1); //获取新的食物
}
}
if(snake1[0][0]==0||snake1[0][1]==0||snake1[0][0]==N+1||snake1[0][1]==N+1) //碰墙 则跳出循环
break;
gotoxy(N+3,4); //设置 输出"得分"这个字符的位置
color(12);
cout<<" 得分"<<endl; //输出
gotoxy(N+5,5); // 设置 得分的 位置
color(11);
cout<<score1<<endl; //输出
Sleep(300-score1); //控制蛇的速度
}
return 0;
}