资源简介
贪吃蛇 。。。。。。。。。。。。。。。。。。。。。。。。
代码片段和文件信息
/* 【自学去】网站收集 http://www.zixue7.com */
#include
#include
#include
#include
using namespace std;
#define WIDTH 64 // 游戏区域网格宽度
#define HEIGHT 48 // 游戏区域网格高度
#define ITEMSIZE 10 // 游戏元素大小
#define CMD_A_UP 0x1 // 控制命令:游戏者 A 向上
#define CMD_A_DOWN 0x2 // 控制命令:游戏者 A 向下
#define CMD_A_LEFT 0x4 // 控制命令:游戏者 A 向左
#define CMD_A_RIGHT 0x8 // 控制命令:游戏者 A 向右
#define CMD_B_UP 0x10 // 控制命令:游戏者 B 向上
#define CMD_B_DOWN 0x20 // 控制命令:游戏者 B 向下
#define CMD_B_LEFT 0x40 // 控制命令:游戏者 B 向左
#define CMD_B_RIGHT 0x80 // 控制命令:游戏者 B 向右
#define CMD_QUIT 0x100 // 控制命令:退出游戏
// 定义游戏元素
enum ITEM { EMPTY = 0 WALL Player_A Player_B Player_DEAD Player_A_NEXT Player_B_NEXT };
// 全局变量
ITEM g_world[WIDTH][HEIGHT]; // 保存游戏区
POINT g_player_a; // 游戏者 A 的坐标
POINT g_player_b; // 游戏者 B 的坐标
POINT g_offset_a; // 游戏者 A 的移动偏移方向
POINT g_offset_b; // 游戏者 B 的移动偏移方向
// 绘制游戏元素
void DrawItem(int x int y ITEM item)
{
switch(item)
{
case EMPTY: setfillcolor(BLACK); break;
case WALL: setfillcolor(LIGHTGRAY); break;
case Player_A: setfillcolor(BLUE); break;
case Player_B: setfillcolor(RED); break;
case Player_DEAD: setfillcolor(MAGENTA); break;
}
bar(x * ITEMSIZE + 1 y * ITEMSIZE + 1 (x + 1) * ITEMSIZE - 2 (y + 1) * ITEMSIZE - 2);
g_world[x][y] = item;
}
// 初始化游戏
void init()
{
int x y;
// 绘制墙壁
for(x = 0; x < WIDTH; x++)
{
DrawItem(x 0 WALL);
DrawItem(x HEIGHT - 1 WALL);
}
for(y = 1; y < HEIGHT - 1; y++)
{
DrawItem(0 y WALL);
DrawItem(WIDTH - 1 y WALL);
}
// 绘制游戏区域
for (x = 1; x < WIDTH - 1; x++)
for (y = 1; y < HEIGHT - 1; y++)
DrawItem(x y EMPTY);
// 随机产生两个游戏者的位置(至少间隔 5 格)
do
{
g_player_a.x = rand() % (WIDTH - 6) + 3; g_player_a.y = rand() % (HEIGHT - 6) + 3;
g_player_b.x = rand() % (WIDTH - 6) + 3; g_player_b.y = rand() % (HEIGHT - 6) + 3;
}while ( (g_player_b.x - g_player_a.x) * (g_player_b.x - g_player_a.x)
+ (g_player_b.y - g_player_a.y) * (g_player_b.y - g_player_b.x) <= 25);
// 画出两个游戏者的位置
DrawItem(g_player_a.x g_player_a.y Player_A);
DrawItem(g_player_b.x g_player_b.y Player_B);
// 随机产生两个游戏者的移动方向
// 该方法的原理详见:http://www.easyx.cn/skills/View.aspx?id=115
int n;
n = (rand() % 4) * 2 + 1; g_offset_a.x = n / 3 - 1; g_offset_a.y = n % 3 - 1;
n = (rand() % 4) * 2 + 1; g_offset_b.x = n / 3 - 1; g_offset_b.y = n % 3 - 1;
// 绘制 Player A 空心方块提示移动方向
int tx = g_player_a.x + g_offset_a.x;
int ty = g_player_a.y + g_offset_a.y;
setcolor(BLUE);
rectangle(tx * ITEMSIZE + 1 ty * ITEMSIZE + 1 (tx + 1) * ITEMSIZE - 2 (ty + 1) * ITEMSIZE - 2);
// 绘制 Player B 空心方块提示移动方向
tx = g_player_b.x + g_offset_b.x;
ty = g_player_b.y + g_offset_b.y;
setcolor(RED);
rectangle(tx * ITEMSIZE + 1 ty * ITEMSIZE + 1 (tx + 1) * ITEMSIZE - 2 (ty + 1) * ITEMSIZE - 2);
// 按确定开始游戏
MessageBox(GetHWnd() _T(“对战贪吃蛇 游戏说明:\n\n“) \
_T(“游戏目标:两条蛇,先碰到墙壁或碰到任何蛇的身
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-03-31 17:51 c语言贪吃蛇游戏的双人对战版\
文件 121 2015-05-17 06:52 c语言贪吃蛇游戏的双人对战版\it学习网.url
文件 7933 2015-05-17 06:56 c语言贪吃蛇游戏的双人对战版\贪吃蛇游戏的双人对战版.cpp
文件 3595 2015-03-31 17:51 c语言贪吃蛇游戏的双人对战版\贪吃蛇游戏的双人对战版.dsp
文件 552 2015-03-31 17:51 c语言贪吃蛇游戏的双人对战版\贪吃蛇游戏的双人对战版.dsw
文件 33792 2015-03-31 17:51 c语言贪吃蛇游戏的双人对战版\贪吃蛇游戏的双人对战版.ncb
文件 48640 2015-03-31 17:51 c语言贪吃蛇游戏的双人对战版\贪吃蛇游戏的双人对战版.opt
文件 824 2015-03-31 17:51 c语言贪吃蛇游戏的双人对战版\贪吃蛇游戏的双人对战版.plg
- 上一篇:Windows下配置python_pcl全套资料
- 下一篇:c语言做的一个任务管理器
相关资源
- c语言做的一个任务管理器
- 九轴姿态解算源代码 C语言
- 基于C语言的《点餐系统》
- 操作系统使用C语言链表实现进程管理
- 基于MATLAB使用C语言的读取GPS的rinex的
- 某科技大学C语言实现班主任管家系统
- C语言课程设计代码学生成绩管理系统
- c语言版easyx五子棋
- 仿雷电射击游戏基于VC++MFC
- 三国杀c++游戏代码含注释
- c语言,二叉树,前中后,递归,非递
- SM3算法IP核
- 华为公司c语言编程规范
- 用C++实现的华容道游戏
- C语言课程设计景区管理系统
- Linux环境下——C语言聊天室项目
- 《基于Linux的设备分配及磁盘调度》
- 五子棋实训报告c语言
- 数据结构与算法c语言 严蔚敏 代码实
- C++学习路线视频全套
- 用C语言实现FFT算法的编写,可与DFT时
- window c语言编写的多线程的Socket局域网
- IPMSG飞鸽传书源代码,linux-c语言,有
- C语言实现CFOP解魔方算法
- 快速傅里叶算法FFTc语言实现
- Linux下c语言实现对文本内容的三种输
- 贪吃蛇 C语言程序
- 汉诺塔C语言源程序
- 矩阵相乘c语言编程
- 数据结构c语言实现严蔚敏版
评论
共有 条评论