我是靠谱客的博主 活力楼房,最近开发中收集的这篇文章主要介绍c语言程序设计:贪吃蛇,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

主要的功能:1.上下左右方向键移动。

                      2.撞墙或者自杀有不同提示。

                      3.有分数显示。

                      4.空格暂停。


注意事项:要在vs上运行,且要含easyx。


话不多说见代码:

#undef UNICODE
#undef _UNICODE//为了使用outtextxy函数
#define _CRT_SECURE_NO_WARNINGS//为了使用sprintf函数
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>//随机函数头文件
#include<graphics.h>//easyx里的头文件
/*********************
* 坐标属性
* 蛇属性
* 食物属性
**********************/
typedef struct pointXY//坐标属性
{
int x;
int y;
}MYPOINT;
struct Snake
{
int num;//节数
MYPOINT xy[100];//蛇最多100节
char postion;//方向
}snake;
struct Food
{
MYPOINT fdxy;//食物的x,y坐标
int eatgrade;
int flag;
}food;
HWND hwnd = NULL;//表示主窗口
enum movPostion
{
UP = 72,
DOWN = 80,
LEFT = 75,
RIGHT = 77
};
/*****************************/
void initSnake();//初始化蛇
void drawSnake();//画蛇
void moveSnake();//移动蛇
void keyDown();//按键处理
void initFood();
void drawFood();
void eatFood();
void showGrade();//展示分数
int snakeDie();//蛇死掉
void pauseMoment();//暂停函数
/*****************************/
int main()
{
srand((unsigned int)time(NULL));//随机函数种子
hwnd = initgraph(640, 480);
setbkcolor(WHITE);//设置窗口颜色
initSnake();
while (1)
{
cleardevice();//刷新
if (food.flag == 0)
{
initFood();
}
drawFood();
drawSnake();
if (snakeDie())
{
break;
}
eatFood();
showGrade();
moveSnake();
while (_kbhit())
{
pauseMoment();
keyDown();
}
Sleep(100);//多少ms移动一单位
}
getchar();//防止闪退
closegraph();
return 0;
}
void initSnake()
{
snake.xy[2].x = 0;
snake.xy[2].y = 0;
snake.xy[1].x = 10;
snake.xy[1].y = 0;
snake.xy[0].x = 20;
snake.xy[0].y = 0;
snake.num = 3;
snake.postion = RIGHT;
food.flag = 0;
food.eatgrade = 0;
}
void drawSnake()
{
for (int i = 0; i < snake.num; i++)
{
setlinecolor(BLACK);//矩形边框颜色黑色
setfillcolor(RGB(rand() % 255, rand() % 255, rand() % 255));//炫彩蛇
fillrectangle(snake.xy[i].x, snake.xy[i].y, snake.xy[i].x + 10, snake.xy[i].y + 10);
//画矩,写形左上与右下的坐标
}
}
void moveSnake()
{
//除了第一节,后的每一节都是前面的坐标
for (int i = snake.num - 1; i > 0; i--)
{
snake.xy[i].x = snake.xy[i - 1].x;
snake.xy[i].y = snake.xy[i - 1].y;
}
//第一节处理
switch (snake.postion)
{
case RIGHT:
snake.xy[0].x += 10;
break;
case LEFT:
snake.xy[0].x -= 10;
break;
case DOWN:
snake.xy[0].y += 10;
break;
case UP:
snake.xy[0].y -= 10;
break;
default:
break;
}
}
void keyDown()
{
char userkey = 0;
userkey = _getch();
switch (userkey)
{
case RIGHT:
if (snake.postion != LEFT)
snake.postion = RIGHT;
break;
case LEFT:
if (snake.postion != RIGHT)
snake.postion = LEFT;
break;
case DOWN:
if (snake.postion != UP)
snake.postion = DOWN;
break;
case UP:
if (snake.postion != DOWN)
snake.postion = UP;
break;
}
}
void initFood()//食物的设计
{
food.fdxy.x = rand() % 65 * 10;//产生食物坐标为10的倍数
food.fdxy.y = rand() % 48 * 10;
food.flag = 1;//食物存在
//如果食物出现在蛇身上,食物重新生成
for(int i = 0; i > snake.num; i++)
{
if (food.fdxy.x == snake.xy[i].x && food.fdxy.y == snake.xy[i].y)
{
food.fdxy.x = rand() % 65 * 10;
food.fdxy.y = rand() % 48 * 10;
}
}
}
void drawFood()
{
setlinecolor(BLACK);
setfillcolor(RGB(rand() % 255, rand() % 255, rand() % 255));
fillrectangle(food.fdxy.x, food.fdxy.y, food.fdxy.x + 10, food.fdxy.y + 10);
}
void eatFood()
{
//蛇边长,分数增加,食物重新生成
if (snake.xy[0].x == food.fdxy.x && snake.xy[0].y == food.fdxy.y)
{
snake.num++;
food.eatgrade += 10;
food.flag = 0;
}
}
int snakeDie()
{
if (snake.xy[0].x > 640 || snake.xy[0].x < 0 || snake.xy[0].y>480 || snake.xy[0].y < 0)
{
outtextxy(200, 200, "你撞墙了");
MessageBox(hwnd, "Gameover!", "撞墙警告", MB_OK);
return 1;//返回1结束
}
for (int i = 1; i < snake.num; i++)
{
if (snake.xy[0].x == snake.xy[i].x && snake.xy[0].y == snake.xy[i].y)
{
outtextxy(200, 200, "你撞自己了");
MessageBox(hwnd, "Gameover!", "自杀警告", MB_OK);
return 1;
}
}
return 0;
}
void showGrade()
{
char grade[100] = "0";
sprintf(grade, "%d", food.eatgrade);//将整形转化为字符串
setbkmode(TRANSPARENT);//设置为透明的方式
settextcolor(LIGHTBLUE);//颜色为青蓝
outtextxy(560, 20, "分数:");
outtextxy(580 + 30, 20, grade);
}
void pauseMoment()
{
if (_getch() == 32)//空格暂停
{
while (_getch() != 32);
}
}

最后

以上就是活力楼房为你收集整理的c语言程序设计:贪吃蛇的全部内容,希望文章能够帮你解决c语言程序设计:贪吃蛇所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部