首页 > 其他分享 >C语言贪吃蛇小游戏

C语言贪吃蛇小游戏

时间:2024-03-02 22:44:48浏览次数:30  
标签:case 10 fdxy food C语言 xy snake 贪吃蛇 小游戏

#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

相关文章

  • 软件开发与创新第一周实验——关于“打怪小游戏”的试玩体验与修改
    一.“打怪小游戏”代码来源http://blog.csdn.net/zjx120307/article/details/126221342?spm=1001.2014.3001.5506二.运行环境及运行结果1.运行环境:Windows11操作系统,C++运行环境2.运行截图:(1)功能6演示(2)功能1演示(3)功能2演示(4)功能3演示(5)功能4演示原代码:点击查看代......
  • C写的贪吃蛇小游戏
    用了三四个小时跟视频写的小游戏,还是优点漏洞,明明加了音乐但是没声音,代码也没报错不知道啥原因;哪位大佬可以帮忙看看环境:win10,vs2017专业版用到的库://里面有easyX图形库函数#include#include//里面有easyX图形库函数#include#include#include//#pragmaco......
  • C语言递归调用子函数
    示例代码1:10进制转16进制查看代码 #include<stdio.h>voiddec2hex(intn){ if(n>15) dec2hex(n/16); if(n%16<10) printf("%c",n%16+'0'); else printf("%c",n%16+55); //printf("%c",n%16<10?n%16+'......
  • 关于C语言结构体
    1.C语言的结构体struct是一个数据类型,这样理解和int,char,float等一样都是数据类型,不过这个数据类型比较特殊,它是由好几种不同的数据类型组成;如:struct{inta,charb,floatc,}Name;解释一下,结构体是数据类型,所以就要先定义在使用,这里定义了一个名为Name的结构体里面有三个数据......
  • 掌握C语言指针,轻松解锁代码高效性与灵活性(中)
    ✨✨欢迎大家来到贝蒂大讲堂✨✨......
  • 掌握字符与字符串:C语言中的神奇函数解析(三)
    ✨✨欢迎大家来到贝蒂大讲堂✨✨......
  • 240301C语言笔记
    一、数组数组里面放数据的,数组变量相当于指针int*ptr=&myArray[0];int*ptr=myArray声明数组:typearrayName[arraySize]初始化大括号获取长度sizeofintlength=sizeof(numbers)/sizeof(numbers[0]);二、内存管理:四个区:自上而下栈区先进后出自动变量、函......
  • C语言笔记11(指针二)
    指针变量作函数参数函数的参数不仅可以是整型、实型、字符型,还可以是指针型它的作用是讲一个变量的地址传送到另外一个函数中          数组名做函数参数当用数组名作为参数时,如果形参数组中元素的值发生变化,实参数组元素的值也随之变化若有一个实......
  • aardio调用c语言dll动态库传结构体详细教程
    安装mingw32下载安装配置官方地址下载安装:https://sourceforge.net/projects/mingw/安装方法:https://blog.csdn.net/HandsomeHong/article/details/120803368↑记得最后要添加一下环境变量mingw64编译32位失败,待继续研究。https://zhuanlan.zhihu.com/p/413181676#安装完成......
  • c语言进行时4-函数与数组
    什么是函数?函数是一块代码,接收零个或多个参数,做一件事情,并返回零个或者一个值。函数定义:本地变量(局部变量):函数的每次运行,就产生了而一个独立的变量空间,在这个空间的变量,是函数的这次运行所独有的,称作本地变量,也称局部变量。定义在函数内部的变量就是本地变量。参数也是本地......