/**
* 项目名称:骑士飞行棋游戏,第二次迭代,完成整个游戏
* 开发日期:2011年5月16日
* 作 者:BBC
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int map[100]; //对战地图
int luckyTurn[] = {6, 23, 40, 55, 69, 83}; // 幸运轮盘
int landMine[] = {5, 13, 17, 33, 38, 50, 64, 80, 94}; // 地雷位置
int pause[] = {9, 27, 60, 93}; // 暂停
int timeTunnel[] = {20, 25, 45, 63, 72, 88, 90}; // 时空隧道
char graph[10];
int playerPos1; // 对战中玩家1的当前位置
int playerPos2; // 对战中玩家2的当前位置
char goAndStop[2][3]; // 走或停标识设置
char playerName[2][20];
/**
* 生成地图: 关卡代号为:1:幸运轮盘 2:地雷 3: 暂停 4:时空隧道 0:普通
*/
void createMap()
{
int i = 0;
// 在对战地图上设置幸运轮盘
for (i = 0; i < sizeof(luckyTurn) / sizeof(int); i++)
{
map[luckyTurn[i]] = 1;
}
// 在对战地图上设置地雷
for(i = 0; i < sizeof(landMine)/sizeof(int); i++){
map[landMine[i]] = 2;
}
// 在对战地图上设置暂停
for (i = 0; i < sizeof(pause) / sizeof(int); i++)
{
map[pause[i]] = 3;
}
// 在对战地图上设置时空隧道
for (i = 0; i < sizeof(timeTunnel) / sizeof(int); i++)
{
map[timeTunnel[i]] = 4;
}
}
/**
* 初始化游戏的一局
*/
void init()
{
createMap(); // 生成地图
playerPos1 = 0; // 设置玩家1起始位置
playerPos2 = 0; // 设置玩家2起始位置
strcpy(goAndStop[0], "on"); // 记录玩家1下一次走或停
strcpy(goAndStop[1], "on"); // 设置玩家2下一次走或停
}
/**
* 显示地图关卡对应的图形
* 输入参数 i 地图当前位置的关卡代号
* 输入参数 index 当前地图位置编号
* 输入参数 playerPos1 玩家1的当前位置
* 输入参数 playerPos2 玩家2的当前位置
* 返回值 地图当前位置的对应图片
*/
char *getGraph(int i, int index, int playerPos1, int playerPos2)
{
if (index == playerPos1 && index == playerPos2)
{
strcpy(graph, "@@");
}
else if (index == playerPos1)
{
// graph = "♀";
strcpy(graph, "A");
}
else if (index == playerPos2)
{
// graph = "♂";
strcpy(graph, "B");
}
else
{
switch (i)
{
case 1: // 幸运轮盘
strcpy(graph, "¤");
break;
case 2: // 地雷
strcpy(graph, "★");
break;
case 3: // 暂停
strcpy(graph, "■");
break;
case 4: // 时光隧道
strcpy(graph, "〓");
break;
default:
strcpy(graph, "∷");
break;
}
}
return graph;
}
/**
* 输出地图的奇数行(第1、3行)
* 输入参数 start 输出的起始点在地图上的位置
* 输入参数 end 输出的结束点在地图上的位置
* 输入参数 playerPos1 玩家1的当前位置
* 输入参数 playerPos2 玩家2的当前位置
*/
void showLine1(int start, int end, int playerPos1, int playerPos2)
{
int i;
for (i = start; i < end; i++)
{
printf("%s", getGraph(map[i], i, playerPos1, playerPos2));
}
}
/**
* 输出地图的偶数行(第2行)
* 输入参数 start 输出的起始点在地图上的位置
* 输入参数 end 输出的结束点在地图上的位置
* 输入参数 playerPos1 玩家1的当前位置
* 输入参数 playerPos2 玩家2的当前位置
*/
void showLine2(int start, int end, int playerPos1, int playerPos2)
{
int i;
for (i = end - 1; i >= start; i--)
{
printf("%s", getGraph(map[i], i, playerPos1, playerPos2));
}
}
/**
* 输出地图的右竖列
* 输入参数 start 输出的起始点在地图上的位置
* 输入参数 end 输出的结束点在地图上的位置
* 输入参数 playerPos1 玩家1的当前位置
* 输入参数 playerPos2 玩家2的当前位置
*/
void showRLine(int start, int end, int playerPos1, int playerPos2)
{
int i, j;
for (i = start; i< end; i++)
{
for (j = 30; j > 0; j--)
{ // 输出30个空格
printf(" ");
}
printf("%s", getGraph(map[i], i, playerPos1, playerPos2));
printf("\n");
}
}
/**
* 输出地图的左竖列
* 输入参数 start 输出的起始点在地图上的位置
* 输入参数 end 输出的结束点在地图上的位置
* 输入参数 playerPos1 玩家1的当前位置
* 输入参数 playerPos2 玩家2的当前位置
*/
void showLLine(int start, int end, int playerPos1, int playerPos2)
{
int i;
for (i = start; i < end; i++)
{
printf("%s\n", getGraph(map[i], i, playerPos1, playerPos2));
}
}
/**
* 显示对战地图
* 输入参数 playerPos1 玩家1的当前位置
* 输入参数 playerPos2 玩家2的当前位置
*/
void showMap(int playerPos1, int playerPos2)
{
showLine1(0, 31, playerPos1, playerPos2); // 显示地图第一行
printf("\n"); // 换行
showRLine(31, 35, playerPos1, playerPos2); // 显示地图右竖行
showLine2(35, 66, playerPos1, playerPos2); // 显示地图第二行
printf("\n"); // 换行
showLLine(66, 69, playerPos1, playerPos2); // 显示地图左竖行
showLine2(69, 100, playerPos1, playerPos2); // 显示地图第3行
}
/**
* 设置对战角色
* 输入参数 no 玩家次序 1:玩家1 2:玩家2
* 输入参数 role 角色代号
*/
void setRole(int no, int role)
{
switch (role)
{
case 1:
strcpy(playerName[no-1], "张飞");
break;
case 2:
strcpy(playerName[no-1], "关羽");
break;
case 3:
strcpy(playerName[no-1], "诸葛亮");
break;
case 4:
strcpy(playerName[no-1], "刘备");
break;
default:
break;
}
}
/**
* 显示对战结果
*/
void judge()
{
if (playerPos1 > playerPos2)
{
printf("\n恭喜%s! 您获胜了!\n", playerName[0]);
}
else
{
printf("\n恭喜%s! 您获胜了!\n", playerName[1]);
}
}
/**
* 两人对战玩法
*/
void play()
{
int step; // 存储骰子数目
printf("****************************************************\n");
printf(" 游戏开始了! \n");
printf("****************************************************\n\n");
// 显示对战双方士兵样式
printf("^_^%s的士兵: A\n", playerName[0]);
printf("^_^%s的士兵: B\n\n", playerName[1]);
// 显示对战地图
printf("\n图例: ■ 暂停 ¤ 幸运轮盘 ★ 地雷 〓 时空隧道 ∷ 普通\n\n");
showMap(playerPos1, playerPos2);
// 游戏开始
while (playerPos1 < 99 && playerPos2 < 99)
{
// 有任何一方走到终点,跳出循环
// 轮流掷骰子
if (!strcmp(goAndStop[0], "on"))
{
// 玩家1掷骰子
step = throwShifter(1); // 掷骰子
// system("cls");
printf("\n-----------------\n"); // 显示结果信息
printf("骰子数:%d \n", step);
playerPos1 = getCurPos(1, playerPos1, step); // 计算这一次移动后的当前位置
printf("\n%s您当前位置:%d \n", playerName[0], playerPos1);
printf("对方当前位置:%d \n", playerPos2);
printf("-----------------\n\n");
showMap(playerPos1, playerPos2); // 显示当前地图
if (playerPos1 == 99)
{ // 如果走到终点
break; // 退出
}
}
else
{
printf("\n%s停掷一次!\n\n", playerName[0]); // 显示此次暂停信息
strcpy(goAndStop[0], "on"); // 设置下次可掷状态
}
printf("\n\n\n\n\n");
if (!strcmp(goAndStop[1], "on"))
{
// 玩家2掷骰子
step = throwShifter(2); // 掷骰子
printf("\n-----------------\n"); // 显示结果信息
printf("骰子数:%d \n", step);
playerPos2 = getCurPos(2, playerPos2, step); // 计算这一次移动后的当前位置
没有合适的资源?快使用搜索试试~ 我知道了~
qishi.zip_游戏VS2010_飞行棋
共40个文件
tlog:18个
pdb:2个
manifest:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 90 浏览量
2022-09-22
23:48:34
上传
评论
收藏 1.13MB ZIP 举报
温馨提示
这是一个骑士飞行棋的游戏,自己在vs2010上实现,很有参考价值
资源推荐
资源详情
资源评论
收起资源包目录
qishi.zip (40个子文件)
骑士飞行棋
骑士飞行
qishi.c 5KB
骑士飞行.sdf 2.27MB
骑士飞行.sln 903B
骑士飞行
骑士飞行.vcxproj.filters 945B
骑士飞行.vcxproj.user 143B
骑士飞行.vcxproj 4KB
Debug
vc100.idb 27KB
CL.write.1.tlog 234B
CL.read.1.tlog 1020B
骑士飞行.lastbuildstate 71B
骑士飞行.exe.embed.manifest.res 472B
mt.read.1.tlog 130B
rc.write.1.tlog 222B
link.2252.write.1.tlog 2B
rc.read.1.tlog 214B
mt.command.1.tlog 338B
cl.command.1.tlog 566B
link-cvtres.read.1.tlog 2B
link.2252.read.1.tlog 2B
骑士飞行_manifest.rc 198B
link.write.1.tlog 550B
qishi2.obj 36KB
骑士飞行.Build.CppClean.log 2KB
骑士飞行.exe.embed.manifest 406B
link.2252-cvtres.read.1.tlog 2B
link-cvtres.write.1.tlog 2B
link.command.1.tlog 1KB
rc.command.1.tlog 438B
link.read.1.tlog 2KB
骑士飞行.exe.intermediate.manifest 381B
mt.write.1.tlog 242B
骑士飞行.log 10KB
link.2252-cvtres.write.1.tlog 2B
vc100.pdb 52KB
骑士飞行.suo 11KB
ipch
骑士飞行-c166fdde
骑士飞行-f57fa8d2.ipch 2.44MB
Debug
骑士飞行.exe 36KB
骑士飞行.pdb 363KB
骑士飞行.ilk 322KB
qishi2.c 14KB
共 40 条
- 1
资源评论
- jiange00862022-12-20资源是宝藏资源,实用也是真的实用,感谢大佬分享~
周楷雯
- 粉丝: 80
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功