C语言入门编程实战(一)——低配版贪吃蛇

游戏效果如图:

C语言入门编程实战(一)——低配版贪吃蛇_第1张图片

游戏说明:通过方向键操控,按下蛇动,不按则不动- -非常简单

               红色部分表示头部

                每次游戏时间30s,时间结束后程序自动退出。

编程语言:C语言

开发环境:VS2017

使用EasyX库处理界面

代码如下:

#include 
#include 
#include 
#include 
#include 

typedef struct postion {
	int x;
	int y;
}Foodpostion;
typedef struct Snakemessage {
	int x;
	int y;
}Snakepostion;
#define KEY_DOWN(vk_c) (GetAsyncKeyState(vk_c)&0x8000)//按下1,不按0
Foodpostion food;                         //当前食物位置
Snakepostion snakeArr[100];               //当前小蛇每个点的信息
int length;                              //当前小蛇长度

void init();                             //初始化界面
void gamebegin();                        //游戏启动
void gameplay();                         //玩游戏具体过程
void close();                            //释放资源
void drawsnake(Snakepostion *snp);        //画蛇
void drawfood();                      //画食物
void clearfood();                     //吃掉食物
void clearsnake(Snakepostion snp[]);  //清除小蛇,准备画新
void drawscore(int score);                   //分数
void drawwindows();                         //绘制边框
void drawtime(int sec);                            //绘制时间
void main() {
	init();                             //初始化界面
	gamebegin();                        //游戏启动
	gameplay();                         //玩游戏具体过程
	close();                            //释放资源
}
void init() {
	initgraph(700, 605);
}
void gamebegin() {
	//绘制边框
	drawwindows();
	/*setlinecolor(RGB(50, 50, 50));//边框颜色
	setlinestyle(PS_SOLID, 10);  //边框为实线,粗细为10像素,此函数后两个参数有默认值,不传
	fillrectangle(0, 0, 475, 600);//左上角和右下角(x,y),此坐标是线宽的中轴线的坐标,外坐标-5 内+5*/
	//绘制初始小蛇
	setlinestyle(PS_SOLID, 1);//改线条粗细
	//setlinecolor(RGB(0, 0, 0));//改线条颜色
	
	length = 5;
	for (int i = 0; i < 5; i++) {
		snakeArr[i].x = 200;
		snakeArr[i].y = 200+i*10;
	}
	drawsnake(snakeArr);
	//绘制初始食物
	drawfood();
	//绘制分数
	drawscore(0);
	//绘制时间
	drawtime(30);
	
}
void gameplay() {
	for (int j = 299; j >= 0; j--) {//监听键盘
		if (j % 10 == 0) {
			drawtime(j / 10);
		}
		if (KEY_DOWN(VK_UP) && snakeArr[0].y > 10) {//上边界
			clearsnake(snakeArr);
			for (int i = length - 1; i > 0; i--) {
				snakeArr[i].x = snakeArr[i - 1].x;
				snakeArr[i].y = snakeArr[i - 1].y;
			}
			snakeArr[0].x = snakeArr[0].x;
			snakeArr[0].y = snakeArr[0].y - 10;
			drawsnake(snakeArr);
		}
		if (KEY_DOWN(VK_DOWN) && snakeArr[length -1].y<590) {//下边界
			clearsnake(snakeArr);
			for (int i = length - 1; i >0; i--) {
				snakeArr[i].x = snakeArr[i - 1].x;
				snakeArr[i].y = snakeArr[i - 1].y;
			}
			snakeArr[0].x = snakeArr[0].x;
			snakeArr[0].y = snakeArr[0].y + 10;
			drawsnake(snakeArr);
			
		}
		if (KEY_DOWN(VK_LEFT) && snakeArr[0].x>10) {//左边界
			clearsnake(snakeArr);
			for (int i = length - 1; i > 0; i--) {
				snakeArr[i].x = snakeArr[i - 1].x;
				snakeArr[i].y = snakeArr[i - 1].y;
			}
			snakeArr[0].x = snakeArr[0].x-10;
			snakeArr[0].y = snakeArr[0].y;
			drawsnake(snakeArr);
		}
		if (KEY_DOWN(VK_RIGHT) && snakeArr[0].x<470) {//右边界
			clearsnake(snakeArr);
			for (int i = length - 1; i > 0; i--) {
				snakeArr[i].x = snakeArr[i - 1].x;
				snakeArr[i].y = snakeArr[i - 1].y;
			}
			snakeArr[0].x = snakeArr[0].x + 10;
			snakeArr[0].y = snakeArr[0].y;
			drawsnake(snakeArr);
		}
		
		if ((food.x == snakeArr[0].x) && (food.y == snakeArr[0].y)) {
			snakeArr[length].x = snakeArr[length - 1].x;
			snakeArr[length].y = snakeArr[length - 1].y+10;
			length++;
			clearfood();
			drawfood();
			
			
			clearsnake(snakeArr);
			drawsnake(snakeArr);
		}
		
		Sleep(100);
		drawscore(length * 10 - 50);
	}
	cleardevice();
	TCHAR str[30];
	settextcolor(RGB(255, 0, 0));//设置文字颜色
	settextstyle(50, 0, _T("黑体"));//设置文字大小,粗细,字体
	_stprintf(str, _T("GAME OVER"));
	outtextxy(300, 250, str);
	drawscore(length * 10 - 50);
	Sleep(2000);
}
void close() {
	_getch();
	closegraph();
}
void drawsnake(Snakepostion snp[]){
	setlinecolor(RGB(0,0,0));
	setfillcolor(RGB(255, 50, 50));
	fillrectangle(snp[0].x, snp[0].y, snp[0].x + 10, snp[0].y + 10);
	setfillcolor(RGB(0, 0, 0));
	for (int i =1; i 

你可能感兴趣的:(C/C++)