C语言项目:贪吃蛇游戏(双人模式)!详细思路+源码分享

小微 科技C语言项目:贪吃蛇游戏(双人模式)!详细思路+源码分享已关闭评论94字数 2538阅读模式
摘要每一一天一个C语言小项目,提升你的编程能力!贪吃蛇游戏大家都玩过,它的玩法也很简单:用游戏按键上下左右控制蛇的方向,寻找吃的东西,每一一吃一口就能得到一定的积分,而且蛇的身子会越吃...

每一天一个C语言小项目,晋升你的编程能力!

贪吃蛇游戏大家都玩过,它的弄法也很简单:用游戏按键上下左右节制蛇的方向,寻觅吃的东西,每一吃一口就能得到一定的积分,而且蛇的身子会越吃越长,身子越长玩的难度就越大,不能碰墙,不能咬到自己的身体,更不能咬自己的尾巴,等到了一定的分数,就能过关,然后继续玩下一关。文章源自微观生活(93wg.com)微观生活-https://93wg.com/2439.html

无非咱们今天要做的贪吃蛇就不是单人本了,你可以理解为C语言贪吃蛇的双人模式——贪吃蛇游戏的双人对战版。文章源自微观生活(93wg.com)微观生活-https://93wg.com/2439.html

游戏双方分别节制蓝色以及红色两条小蛇的前进,碰壁或咬到蛇身体算输。文章源自微观生活(93wg.com)微观生活-https://93wg.com/2439.html

这个对战版的贪吃蛇游戏网上有很多源代码,这个代码的特色就是为两个游戏者分别增添了命令队列,以实现更舒服的节制。文章源自微观生活(93wg.com)微观生活-https://93wg.com/2439.html

本项目编译环境:Visual Studio 2019/2022,EasyX插件文章源自微观生活(93wg.com)微观生活-https://93wg.com/2439.html

代码展现:文章源自微观生活(93wg.com)微观生活-https://93wg.com/2439.html

1.定义变量以及游戏元素文章源自微观生活(93wg.com)微观生活-https://93wg.com/2439.html

include <stdio.h>
include <time.h>
define WIDTH 64 // 游戏区域网格宽度
define ITEMSIZE 10 // 游戏元素大小
define CMD_A_DOWN 0x2 // 节制命令:游戏者 A 向下
define CMD_A_RIGHT 0x8 // 节制命令:游戏者 A 向右
define CMD_B_DOWN 0x20 // 节制命令:游戏者 B 向下
define CMD_B_RIGHT 0x80 // 节制命令:游戏者 B 向右
39;W&39;w&39;S&39;s&39;A&39;a&39;D&39;d': if < 16) PLAYER_A_CMD.push; break;
case 0 : case 0xE0:
switch)
{
case 72: if < 16) PLAYER_B_CMD.push; break;
case 80: if < 16) PLAYER_B_CMD.push; break;
case 75: if < 16) PLAYER_B_CMD.push; break;
case 77: if < 16) PLAYER_B_CMD.push; break;
}
}
}文章源自微观生活(93wg.com)微观生活-https://93wg.com/2439.html

// 读取 Player A 的命令
int c = 0;
while)
{
c = PLAYER_A_CMD.front;
PLAYER_A_CMD.pop;
if && g_offset_a.x != 0) break;
if && g_offset_a.y != 0) break;
}
if
cmd |= c;文章源自微观生活(93wg.com)微观生活-https://93wg.com/2439.html

// 读取 Player B 的命令
c = 0;
while)
{
c = PLAYER_B_CMD.front;
PLAYER_B_CMD.pop;
if && g_offset_b.x != 0) break;
if && g_offset_b.y != 0) break;
}
if cmd |= c;文章源自微观生活(93wg.com)微观生活-https://93wg.com/2439.html

// 返回命令
return cmd;
}

5.处理用户指令

bool DealCmd
{
if && g_offset_a.x != 0) { g_offset_a.x = 0; g_offset_a.y = -1; }
if && g_offset_a.x != 0) { g_offset_a.x = 0; g_offset_a.y = 1; }
if && g_offset_a.y != 0) { g_offset_a.x = -1; g_offset_a.y = 0; }
if && g_offset_a.y != 0) { g_offset_a.x = 1; g_offset_a.y = 0; }
if && g_offset_b.x != 0) { g_offset_b.x = 0; g_offset_b.y = -1; }
if && g_offset_b.x != 0) { g_offset_b.x = 0; g_offset_b.y = 1; }
if && g_offset_b.y != 0) { g_offset_b.x = -1; g_offset_b.y = 0; }
if && g_offset_b.y != 0) { g_offset_b.x = 1; g_offset_b.y = 0; }
if
if , _T, _T, MB_OKCANCEL) == IDOK)
return false;

return true;
}

6.判断蛇的状况&游戏收场后的弹窗选择

bool DealGame
{
// Player A、B 前进
g_player_a.x += g_offset_a.x;
g_player_a.y += g_offset_a.y;
g_player_b.x += g_offset_b.x;
g_player_b.y += g_offset_b.y;

// 判断 Player A、B 的生死状况
bool dead_a = false, dead_b = false, dead_ab = false;

if
{
DrawItem;
dead_ab = true;
}
else if
{
DrawItem;
dead_a = true;
}
else if
{
DrawItem;
dead_b = true;
}
else
{
DrawItem;
DrawItem;
return true;
}

// 判断是不是要从新开始
bool restart = false;

if )
restart = MessageBox, _T,
_T, MB_YESNO | MB_ICONINFORMATION) == IDYES;
else if
restart = MessageBox, _T,
_T, MB_YESNO | MB_ICONINFORMATION) == IDYES;
else if
restart = MessageBox, _T,
_T, MB_YESNO | MB_ICONINFORMATION) == IDYES;

if
{
init;
return true;
}
else
return false;
}

7.补上入口函数

void main
{
initgraph;
srandtime);

// 初始化
init;

// 游戏主循环
while
{
int cmd = GetCmd; // 获取用户命令
if ) break; // 处理命令
if ) break; // 处理游戏
Sleep; // 延时
}

// 关闭绘图窗口
closegraph;
}

大家赶快去动手试试吧!

另外,我也给大家分享我搜集的其他资源,从最零基础开始的教程到C语言C++项目案例,帮助大家在学习C语言的道路上乘风破浪!

编程学习书籍分享:

编程学习视频分享:

收拾分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)最重要的是你可以在群里面交换发问编程问题哦!

对于C/C++感兴致可以关注小编在后台

以上就是微观生活(93wg.com)关于“C语言项目:贪吃蛇游戏(双人模式)!详细思路+源码分享”的详细内容,希望对大家有所帮助!

继续阅读
 
小微
  • 版权声明: 本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们(管理员邮箱:81118366@qq.com),情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!
  • 转载请务必保留本文链接:https://93wg.com/2439.html