• 大小: 8KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: C/C++
  • 标签: c语言  贪吃蛇  游戏  

资源简介

贪吃蛇 。。。。。。。。。。。。。。。。。。。。。。。。

资源截图

代码片段和文件信息

/* 【自学去】网站收集 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

评论

共有 条评论