IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 贪吃蛇小游戏 -> 正文阅读

[游戏开发]贪吃蛇小游戏

#include<iostream>
#include<stdlib.h>
#include<conio.h>/*onio是Console
Input/Output(控制台输入输出)的简写,
其中定义了通过控制台进行数据输入和数据输出的函数,
主要是一些用户通过按键盘产生的对应操作,比如getch()函数等等。*/
#include<easyx.h>
#include<graphics.h>//画图头文件
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")
using namespace std;
#define snakenum 500

struct snake
{
? ? int size;//蛇的长度
? ? int dir;//蛇的方向
? ? int speed;//蛇的速度
? ? POINT coor[snakenum];//坐标

}snake;

struct food
{
? ? int x;
? ? int y;
? ? int r;//食物大小
? ? bool flag;//标记是否被吃
? ? DWORD color;
}food;//食物结构


enum DIR
{
? ? UP,
? ? DOWN,
? ? LEFT,
? ? RIGHT,
};//枚举默认为0,1,2,3...//蛇的方向

//移动蛇

void gameinit()
{
? ? mciSendString("open ./res/会不会刘大壮.mp3 alias nm", 0, 0, 0);
? ? mciSendString("play nm repeat",0, 0, 0);
? ? int i;/*SHOWCONSOLE*/
? ? initgraph(500, 500);//显示控制台
? ? snake.size = 3;//开始三节蛇
? ? snake.speed = 10;//蛇速度
? ? snake.dir = RIGHT;
? ? for (i = 0; i < snake.size; i++)
? ? {
? ? ? ? snake.coor[i].x = 40 - 10 * i;//根据蛇的半径求的位置
? ? ? ? snake.coor[i].y = 10;
? ? }
? ? //随机产生一个整数,没有放置随机数种子,则每次都是固定的
? ? //系统开机到现在经过的毫秒数
? ? srand(time(NULL));
? ? food.x = rand() % 70;
? ? food.y = rand() % 100;
? ? food.color = RGB(rand() % 256, rand() % 256, rand() % 256);
? ? food.r = rand() % 10 + 5;
? ? food.flag = true;
}

void gamedraw()
{

? ? //双缓冲绘图
? ? BeginBatchDraw();

? ? setbkcolor(RGB(200, 250, 219));
? ? cleardevice();
? ? setfillcolor(RED);//蛇的颜色
? ? for (int i = 0; i < snake.size; i++)
? ? {
? ? ? ? solidcircle(snake.coor[i].x, snake.coor[i].y, 5);
? ? }//画出三节蛇

? ? //绘制食物
? ? if (food.flag)
? ? {
? ? ? ? solidcircle(food.x, food.y, food.r);
? ? }


? ? //绘制完毕后
? ? EndBatchDraw();
}


void keycontrl()
{

? ? if (_kbhit())//判断是否有按键有按键返回真执行下面移动
? ? {
? ? ? ? //加下划线函数库内的函数
? ? ? ? switch (_getch())/*是编程中所用的函数,
? ? ? ? ? ? 这个函数是一个不回显函数,当用户按下某个字符时
? ? ? ? ? ? ,函数自动读取,无需按回车,有的C语言命令行程序会用到此函
? ? ? ? ? ? 数做游戏,但是这个函数并非标准函数,要注意移植性!*/
? ? ? ? ? ? // ?72 ?80 75 77上下左右键盘键值
? ? ? ? {
? ? ? ? case 'w':
? ? ? ? case 'W':
? ? ? ? case 72:
? ? ? ? ? ? if (snake.dir != DOWN)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? snake.dir = UP;
? ? ? ? ? ? }
? ? ? ? ? ? break;

? ? ? ? case 's':
? ? ? ? case 'S':
? ? ? ? case 80:
? ? ? ? ? ? if (snake.dir != UP)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? snake.dir = DOWN;
? ? ? ? ? ? }
? ? ? ? ? ? break;

? ? ? ? case 'A':
? ? ? ? case 'a':
? ? ? ? case 75:
? ? ? ? ? ? if (snake.dir != RIGHT)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? snake.dir = LEFT;
? ? ? ? ? ? }
? ? ? ? ? ? break;

? ? ? ? case 'D':
? ? ? ? case 'd':
? ? ? ? case 77:
? ? ? ? ? ? if (snake.dir != LEFT)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? snake.dir = RIGHT;
? ? ? ? ? ? }
? ? ? ? ? ? break;

? ? ? ? ? ? //游戏暂停
? ? ? ? case' ':
? ? ? ? ? ? while (1)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if (_getch() == ' ')
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? return;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? break;

? ? ? ? }
? ? }
}
//通过按键移动蛇

void ?snakemove()
{

? ? int i;

? ? //让身体跟着头部移动的循环
? ? for (i = snake.size - 1; i > 0; i--)
? ? {
? ? ? ? snake.coor[i] = snake.coor[i - 1];//一个循环让尾跟着前一个走
? ? }

? ? switch (snake.dir)
? ? {//头部移动

? ? case UP:snake.coor[0].y -= snake.speed;
? ? ? ? if (snake.coor[0].y - 5 <= 0)//超出上面边界
? ? ? ? {
? ? ? ? ? ? snake.coor[0].y = 500;
? ? ? ? }
? ? ? ? break;

? ? case DOWN://snake.speed等于蛇的半径
? ? ? ? snake.coor[0].y += snake.speed;
? ? ? ? if (snake.coor[0].y + 5 >= 500)//超出上面边界
? ? ? ? {
? ? ? ? ? ? snake.coor[0].y = 0;
? ? ? ? }
? ? ? ? break;

? ? case LEFT:
? ? ? ? snake.coor[0].x -= snake.speed;
? ? ? ? if (snake.coor[0].x - 5 <= 0)//超出左面边界
? ? ? ? {
? ? ? ? ? ? snake.coor[0].x = 500;
? ? ? ? }
? ? ? ? break;


? ? case RIGHT:
? ? ? ? snake.coor[0].x += snake.speed;
? ? ? ? if (snake.coor[0].x + 5 >= 500)//超出上面边界
? ? ? ? {
? ? ? ? ? ? snake.coor[0].x = 0;
? ? ? ? }
? ? ? ? break;


? ? default:
? ? ? ? break;
? ? }
? ? //画出三节蛇
? ? //移动是什么发生改变
}


void eatfood()
{
? ? //食物存在
? ? if (food.flag && snake.coor[0].x >= food.x - food.r && snake.coor[0].x <= food.x + food.r && snake.coor[0].y
? ? ? ? >= food.y - food.r && snake.coor[0].y <= food.y + food.r)
? ? {
? ? ? ? food.flag = 0;
? ? ? ? snake.size++;
? ? }
? ? //如果食物消失,重新生成食物
? ? if (!food.flag)
? ? {
? ? ? ? food.x = rand() % 500;
? ? ? ? food.y = rand() % 500;
? ? ? ? food.color = RGB(rand() % 256, rand() % 256, rand() % 256);
? ? ? ? food.r = rand() % 10 + 5;
? ? ? ? food.flag = true;
? ? }
}


int main()

{
? ? gameinit();//游戏初始化参数
? ? gamedraw();//绘画
? ? while (1)
? ? {
? ? ? ? snakemove();
? ? ? ? gamedraw();
? ? ? ? keycontrl();
? ? ? ? eatfood();
? ? ? ? Sleep(10);//等待一段时间
? ? }


? ? return 0;
}

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-08-23 17:01:20  更:2021-08-23 17:01:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 21:41:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码