您的位置:js12345金沙官网登入 > 网络编程 > C语言/C加加编程学习之贪吃蛇小游戏源代码

C语言/C加加编程学习之贪吃蛇小游戏源代码

2019-10-02 10:01

C语言是面向过程的,而C++是面向对象的。C和C++的区别:

[代码运行效果截图]

C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入进行运算处理得到输出控制)。

金沙澳门娱乐网址 1

C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。

[c]代码库

金沙澳门娱乐网址 2

#include

C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。

#include

以前我们已经做出来了一个能吃东西变长的蛇。不过它好像不会死。。。

#include

现在就来实现一下game over的功能吧。

#include

写个函数判断蛇是否撞到自己或者撞到墙:

#include

金沙澳门娱乐网址 3

#include

boolgameOver(){

#define N 21

boolisGameOver=false;

//●★

intsX=s[0][0],sY=s[0][1];//蛇头的x坐标和y坐标if(sX==0||sX==H-1||sY==0||sY==W-1)

intapple[3];

isGameOver=true;

charscore[3];

for(inti=1; i

chartail[3];

{

voidgotoxy(intx, inty) //输出坐标

if(s[i][0]==sX&&s[i][1]==sY)

{

isGameOver=true; }

COORD pos;//WINDOWS API中定义的一个结构表示一个字符在控制台屏幕上的坐标

return isGameOver;

pos.X = x;

}

pos.Y = y;

金沙澳门娱乐网址 4

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);

然后在main里面加这个实现gameOver

//使光标 到这个位置的函数.

金沙澳门娱乐网址 5

}

if(gameOver

voidcolor //颜色函数

{

{

system;//清除屏幕内容printf("Game Overn");

HANDLEhConsole = GetStdHandle((STD_OUTPUT_HANDLE)) ;//用来修改命令行窗口的颜色

system;

SetConsoleTextAttribute(hConsole,b) ;

break;

}

}

intBlock(charhead[2]) //判断出界

金沙澳门娱乐网址 6

{

看看效果

if((head[0] < 1) || (head[0] > N) || (head[1] < 1) || (head[1] > N))

金沙澳门娱乐网址 7金沙澳门娱乐网址 8金沙澳门娱乐网址 9

return1;

小编推荐一个学C语言/C++的学习裙【 二六三,六八八,二七六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

return0;

到现在为止的代码:

}

金沙澳门娱乐网址 10

intEat(charsnake[2]) //吃了苹果

#include

{

#include

if((snake[0] == apple[0]) && (snake[1] == apple[1]))

#include

{

#include

apple[0] = apple[1] = apple[2] = 0;

#include

gotoxy;

#defineH 23

color;

#defineW 75

printf("%d",score[0]*10);

#defineWAIT_TIME 500//定义direction的每个值代表的方向

color;

#defineUP 0

return1;

#defineDOWN 1

}

#defineLEFT 2

return0;

#defineRIGHT 3

}

inta[H][W];//地图数组

voidDraw(char**snake, intlen) //蛇移动

ints[H*W][2];//蛇身坐标数组

{

intsLength;//蛇的长度

if

intdirection;//蛇的方向

{

booleated=false;//标记是否吃到食物

gotoxy(apple[1] * 2, apple[0]);

voidinit()//程序开始时的初始化操作

color;

{

printf;

srand(time; //设置随机数种子为现在的时间CONSOLE_CURSOR_INFO cursor_info = {1,0};

color;//轨迹颜色

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);//隐藏关标

}

inti,j;

gotoxy(tail[1] * 2, tail[0]);

for(i=0; i

if

{

{

a[i][0]=1;//让第一列为1a[i][W-1]=1;//让最后一列为1

color;

}

printf;

for(j=0; j

color;

{

}

a[0][j]=1;//让第一行为1a[H-1][j]=1;//让最后一行为1

else

}

printf;

sLength=4;//让蛇的最初长度为4s[0][0]=H/2;

gotoxy(snake[0][1] * 2, snake[0][0]);

s[0][1]=W/2;//给蛇头坐标赋值for(i=1; i<4; i++)

color;

{

printf;

s[i][0]=s[0][0]+i;

color;

s[i][1]=s[0][1];//给刚开始的蛇身几个初始坐标

putchar;

}

}

direction=UP;}

char** Move(char**snake, chardirx, int*len) //控制方向

voidgotoxy(inti,intj)//移动光标

{

{

inti, full = Eat;

COORD position={j,i}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),position);}

memcpy(tail, snake[-1], 2);

intcheck(intii,intjj)//判断这个点能不能放食物,可以放返回1,不能放返回0

for(i = - 1; i > 0; --i)

{

memcpy(snake[i], snake[i-1], 2);

if(a[ii][jj]==1)//如果有障碍物,返回0return0;

switch

inti;

{

金沙澳门娱乐网址,for(i=0; i

case'w': case'W': --snake[0][0]; break;

if(ii==s[i][0]&&jj==s[i][1])//如果和其中一个蛇身重合,就返回0return0; }

case's': case'S': ++snake[0][0]; break;

if(ii==0||ii==H-1||jj==0||jj==W-1)//如果在边界上面,返回0return0;

case'a': case'A': --snake[0][1]; break;

return1;//最后筛选 过后的是符合条件的点

case'd': case'D': ++snake[0][1]; break;

}

default: ;

voidfood(){

}

inti,j;

if

do {

{

i=rand()%H;//生成0~H-1之间的一个数j=rand()%W;

snake = realloc(snake, sizeof * + 1));

} while(check;//生成点直到满足条件a[i][j]=-1;//标记为食物

snake[] = malloc(sizeof * 2);

gotoxy;

memcpy(snake[], tail, 2);

printf;//画出食物

++;

}

++score[0];

voiddrawMap()//画地图

if(score[3] < 16)

{

++score[3];

gotoxy;

tail[2] = 1;

inti,j;

}

for(i=0; i

else

for(j=0; j

tail[2] = 0;

{

returnsnake;

if(a[i][j]==0)//为0输出空格printf;

}

else//为1输出#printf;

voidinit(charplate[N+2][N+2], char***snake_x, int*len) //初始化

}

{

printf;//别忘了换行

inti, j;

}}

char**snake = NULL;

voidmove(){

*len = 3;

int i;

score[0] = score[3] =3;

gotoxy(s[sLength-1][0],s[sLength-1][1]);

snake = realloc(snake, sizeof * ;

printf;//在尾巴上面画空格以擦除尾巴if//如果吃到了食物

for(i = 0; i < *len; ++i)

{

snake[i] = malloc(sizeof * 2);

sLength++;

for(i = 0; i < 3; ++i)

eated=false;//设置为false,不然无限变长}

{

for(i=sLength-1; i>0; i--)//从尾巴开始,每一个点的位置等于它前面一个点的位置

snake[i][0] = N/2 + 1;

{

snake[i][1] = N/2 + 1 + i;

s[i][0]=s[i-1][0];

}

s[i][1]=s[i-1][1]; }

for(i = 1; i <= N; ++i)

switch(direction) {

for(j = 1; j <= N; ++j)

case UP:

plate[i][j] = 1;

s[0][0]--; break;

apple[0] = rand()%N + 1; apple[1] = rand()%N + 1;

case DOWN:

apple[2] = 1;

s[0][0]++; break;

for(i = 0; i < N + 2; ++i)

case LEFT:

{

s[0][1]--; break;

gotoxy;

case RIGHT:

for(j = 0; j < N + 2; ++j)

s[0][1]++; break; }}

{

voiddrawSnake()//画蛇

switch(plate[i][j])

{

{

inti;

case0:

for(i=0; i

color;printf;color; continue;

{

case1: printf; continue;

gotoxy(s[i][0],s[i][1]);//移动关标到蛇的坐标printf;//在这个位置画蛇}}

default: ;

voidkey(){

}

if!=0)//如果有键盘输入

}

{

putchar;

charin;

}

while==0)//如果玩家输入了多个按键,以最后一个按键为准in=getch();

for(i = 0; i < ; ++i)

switch {

{

case'w':

gotoxy(snake[i][1] * 2, snake[i][0]);

case'W':

printf;

if(direction!=DOWN)//不能缩头吧。。。。direction=UP; break;

}

case's':

putchar;

case'S':

*snake_x = snake;

if(direction!=UP)

}

direction=DOWN; break;

voidManual()

case'a':

{

case'A':

gotoxy;

if(direction!=RIGHT)

color;

direction=LEFT; break;

printf("按 W S A D 移动方向");

case'd':

gotoxy;

case'D':

printf("按 space 键暂停");

if(direction!=LEFT)

gotoxy;

direction=RIGHT; break;

color;

case'p':

printf("历史最高分为: ");

case'P':

color;

gotoxy;//将光标移动到下面system;

gotoxy;

gotoxy;

printf("%d",score[1]*10);

printf;//消去下面的按任意键继续break; } }}

color;

boolgameOver(){

gotoxy;

boolisGameOver=false;

printf("你现在得分为: 0");

intsX=s[0][0],sY=s[0][1];//蛇头的x坐标和y坐标if(sX==0||sX==H-1||sY==0||sY==W-1)

}

isGameOver=true;

intFile_in() //取记录的分数

for(inti=1; i

{

{

FILE*fp;

if(s[i][0]==sX&&s[i][1]==sY)

if((fp = fopen("C:\tcs.txt","a+")) == NULL)

isGameOver=true; }

{

returnisGameOver;}

gotoxy(N+18, N+2);

int main()

printf("文件不能打开n");

{

exit;

init(); //程序开始时的初始化操作drawMap();//画地图

}

food();

if((score[1] = fgetc != EOF);

while

else

{

score[1] = 0;

drawSnake(); //画蛇Sleep(WAIT_TIME);//等待一段时间

return0;

key();

}

move(); //移动蛇(主要是修改蛇身数组的数据)if(gameOver

intFile_out() //存数据

{

{

system;//清除屏幕内容printf("Game Overn");

FILE*fp;

system; break; }

if(score[1] > score[0])

if(a[s[0][0]][s[0][1]]==-1)//如果蛇头碰到食物,就重新投放食物,并且把食物点重置为0

{gotoxy;

{

color;

eated=true;//标记已经吃到食物

puts("Demi 加油哦");

food();

gotoxy;

a[s[0][0]][s[0][1]]=0;//去掉食物

return0;

} }

}

return0;

if((fp = fopen("C:\tcs.txt","w+")) == NULL)

}

{

金沙澳门娱乐网址 11

printf("文件不能打开n");

接下来,我们来显示一下成绩。

exit;

声明一个变量来记录分数

}

intscore=0;//得分

if(fputc(--score[0],fp)==EOF)

本文由js12345金沙官网登入发布于网络编程,转载请注明出处:C语言/C加加编程学习之贪吃蛇小游戏源代码

关键词: