C语言基础贪吃蛇程序设计,C语言入门编程实战(一)——低配版贪吃蛇

#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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值