#include <stdio.h>
#include <graphics.h> //里面有easyX图形库函数
#include <conio.h>
#include <time.h>
#include <mmsystem.h>
//#pragma comment(lib,"winmm.lib")
/******************************结构体*******************************/
//坐标属性
typedef struct point {
int x;
int y;
}MYPOINT;
//蛇
struct Snake
{
MYPOINT xy[1000];//坐标
int position; //方向
int num; //长度
}snake;
//食物
struct Food
{
MYPOINT fdxy;
int flag;
int grade;
}food;
//枚举方向
enum position {up, down, left,right};
/*************************模块化设计功能*******************************/
//玩蛇
//初始化蛇宽度10像素,高度10像素,三组的长度
//定义它的初始位置:原点
//初始长度,初始移动方向
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.position = right;
snake.num = 3;
}
//画出蛇
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.position)
{
case up:
snake.xy[0].y -= 10;
break;
case down:
snake.xy[0].y += 10;
break;
case left:
snake.xy[0].x -= 10;
break;
case right:
snake.xy[0].x += 10;
break;
}
}
//按键操作
void keyDown() {
char userkey = _getch();
switch (userkey)
{
case 'w':
case 'W':
case 72:
if (snake.position!=down)
snake.position = up;
break;
case 's':
case 'S':
case 80:
if (snake.position != up)
snake.position = down;
break;
case 'a':
case 'A':
case 75:
if (snake.position != right)
snake.position = left;
break;
case 'd':
case 'D':
case 77:
if (snake.position != left)
snake.position = right;
break;
}
}
//玩食物
//初始化食物
void initFood() {
food.fdxy.x = rand() % 80 * 10;
food.fdxy.y = rand() % 60 * 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() % 80 * 10;
food.fdxy.y = rand() % 60 * 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 earFood() {
if (snake.xy[0].x == food.fdxy.x&&snake.xy[0].y == food.fdxy.y){
snake.num++;
food.flag = 0;
food.grade += 10;
}
}
//显示分数
void showGrade() {
//格式化打印
char grade[20] = "";
sprintf_s(grade, "grade:%d", food.grade);
settextcolor(LIGHTBLUE);
settextstyle(25, 0, "楷体");
outtextxy(650,50,grade);
}
int main()
{
srand((unsigned int)time(NULL));
//1.创建图形窗口,初始化图形环境
initgraph(800, 600);
//2.背景颜色
setbkcolor(RGB(200,120,119));
//需要清屏刷新颜色
cleardevice();
mciSendString("open 1.mp3", 0, 0, 0);
mciSendString("play 1.mp3", 0, 0, 0);
//用填充矩形代替蛇身体
//fillrectangle(100,100,200,200);
initSnake();
drawSnake();
while (1)
{
cleardevice();
moveSnake();
drawSnake();
if (food.flag == 0) {
initFood();
}
if (_kbhit())
{
keyDown();
}
drawFood();
earFood();
showGrade();
Sleep(100);
}
_getch(); //防止闪屏,等待用户输入一个字符
//关闭窗口
closegraph();
return 0;
}
标签:case,10,fdxy,food,C语言,xy,snake,贪吃蛇,小游戏
From: https://www.cnblogs.com/luexiaomeng/p/18049403