C#实现飞行棋源码
程序员文章站
2023-11-18 17:51:58
本文实例为大家分享了c#实现飞行棋的具体代码,供大家参考,具体内容如下游戏规则如果玩家a踩到了玩家b,玩家b退6格踩到了1幸运轮盘,a交换位置,b轰炸对方使对方退6格踩到了2地雷,退6格踩到了3暂停,...
本文实例为大家分享了c#实现飞行棋的具体代码,供大家参考,具体内容如下
游戏规则
如果玩家a踩到了玩家b,玩家b退6格
踩到了1幸运轮盘,a交换位置,b轰炸对方使对方退6格
踩到了2地雷,退6格
踩到了3暂停,暂停一回合
踩到了4时空隧道,进10格
踩到了方块,什么都不干
0表示普通关卡
1表示幸运轮盘◎
2表示地雷★
3表示暂停▲
4表示时空隧道卍
关于飞行棋源码的解析,下一篇文章发出。
源码
using system; using system.collections.generic; using system.linq; using system.text; using system.threading.tasks; namespace 飞行棋 { class program { //我们用静态字段来模拟全局变量 static int[] maps=new int[100]; //声明一个静态字段的数组用来存储玩家a和玩家b的坐标 static int[] playerpos = new int[2]; //存储两个玩家的姓名 static string[] playernames = new string[2]; //两个玩家的标记 static bool[] flags = new bool[2]; //flags[0]玩家a和flags[1]玩家b默认都是false static void main(string[] args) { gameshow(); //加载游戏头 #region 输入玩家姓名 console.writeline("请输入玩家a的姓名"); playernames[0] = console.readline(); while (playernames[0]=="") { console.writeline("玩家a姓名不能为空,请重新输入"); playernames[0] = console.readline(); } console.writeline("请输入玩家b的姓名"); playernames[1] = console.readline(); while (playernames[1] == ""||playernames[1]==playernames[0]) { if (playernames[1] == "") { console.writeline("姓名不能为空,请重新输入"); playernames[1] = console.readline(); } else { console.writeline("玩家b姓名不能重复,请重新输入"); playernames[1] = console.readline(); } } #endregion //玩家姓名写好后,进行清屏 console.clear(); //清屏 gameshow(); console.writeline("{0}的士兵用a表示", playernames[0]); console.writeline("{0}的士兵用b表示", playernames[1]); initailmap(); //初始化地图 drowmap(); //画出地图---注意:画地图前首先应初始化地图 //当玩家a和玩家b没有一个人到达终点的时候都在游戏中 while (playerpos[0] < 99 && playerpos[1] < 99) { if (flags[0] == false) { playgame(0); } else { flags[0] = false; } if (playerpos[0] >= 99) { console.writeline("玩家{0}赢了玩家{1}", playernames[0], playernames[1]); break; } if (flags[1] == false) { playgame(1); } else { flags[1] = false; } if (playerpos[1] >= 99) { console.writeline("玩家{0}赢了玩家{1}", playernames[1], playernames[0]); break; } } console.readkey(); } /// <summary> /// 设置游戏头及输出内容的颜色 /// </summary> public static void gameshow() { console.foregroundcolor = consolecolor.blue; //设置输出内容的前景色 console.writeline("**********************"); console.foregroundcolor = consolecolor.cyan; console.writeline("**********************"); console.foregroundcolor = consolecolor.red; console.writeline("******飞行棋大战******"); console.foregroundcolor = consolecolor.yellow; console.writeline("**********************"); console.foregroundcolor = consolecolor.darkgray; console.writeline("**********************"); console.foregroundcolor = consolecolor.green; console.writeline("**********************"); } /// <summary> /// 初始化地图 /// </summary> public static void initailmap() { int[] lucklyturn = { 6, 23, 40, 55, 69, 83 }; //幸运轮盘 for (int i = 0; i < lucklyturn.length; i++) { int index = lucklyturn[i]; maps[index] = 1; //将幸运轮盘的位置处值都设为1 } int[] landmine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷 for (int i = 0; i < landmine.length; i++) { int index = landmine[i]; maps[index] = 2; //将地雷的位置处值都设为2 } int[] pause = { 9, 27, 60, 93 }; //暂停 for (int i = 0; i < pause.length; i++) { int index = pause[i]; maps[index] = 3; //将暂停的位置处值都设为3 } int[] timetunnel = { 20, 25, 45, 63, 72, 88, 90 };//时空隧道 for (int i = 0; i <timetunnel.length; i++) { int index=timetunnel[i]; maps[index] = 4; //将时空隧道的位置处值都设为4 } } /// <summary> /// 画出地图 /// </summary> public static void drowmap() { console.writeline("图例:普通方块:□ 幸运轮盘:◎ 地雷:★ 暂停:▲ 时空隧道:卍"); //第一横行0--29 for (int i = 0; i <= 29; i++) { console.write(drowstringmap(i)); //输出返回的当前单元格的图形 } //画完第一行后换行 console.writeline(); //第一竖行30--34 for (int i = 30; i <= 34; i++) { for (int j = 0; j < 29; j++) { console.write(" "); //两个空格 } console.write(drowstringmap(i)); console.writeline(); } //第二横行35--64 for (int i = 64; i >=35; i--) { console.write(drowstringmap(i)); } //第二横行打印完后换行 console.writeline(); //第二竖行65--69 for (int i = 65; i <= 69; i++) { console.write(drowstringmap(i)); console.writeline(); } //第三横行70--99 for (int i = 70; i <= 99; i++) { console.write(drowstringmap(i)); } console.writeline(); //画完最后一行地图后应该换行 } /// <summary> /// 画当前的单元格的图案 /// </summary> /// <param name="i">传入当前单元格的索引</param> /// <returns>返回当前单元格的图形</returns> public static string drowstringmap(int i) { string str = " "; //如果玩家a和玩家b的坐标相同并且都在地图上画一个<>(因为刚开始和结束的时候玩家可能去地图外) if (playerpos[0] == playerpos[1] && playerpos[0] == i) { console.foregroundcolor = consolecolor.blue; str="<>"; } else if (playerpos[0] == i) { console.foregroundcolor = consolecolor.blue; str="a"; } else if (playerpos[1] == i) { console.foregroundcolor = consolecolor.blue; str="b"; } else { switch (maps[i]) { case 0: console.foregroundcolor = consolecolor.darkyellow; str="□"; break; case 1: console.foregroundcolor = consolecolor.green; str="◎"; break; case 2: console.foregroundcolor = consolecolor.red; str="★"; break; case 3: console.foregroundcolor = consolecolor.blue; str="▲"; break; case 4: console.foregroundcolor = consolecolor.darkcyan; str="卍"; break; } } //else return str; } /// <summary> /// 玩游戏 /// </summary> public static void playgame(int playernumber) { random r = new random(); int rnumber = r.next(1, 7); console.writeline("{0}玩家开始掷骰子", playernames[playernumber]); console.readkey(true); //readkey是重载函数,里面参数为true表示不显示按下的键。 console.writeline("{0}掷出了{1}", playernames[playernumber], rnumber); console.readkey(true); console.writeline("{0}按任意键开始行动", playernames[playernumber]); console.readkey(true); playerpos[playernumber] += rnumber; changepos(); console.writeline("玩家{0}行动完了", playernames[playernumber]); console.readkey(true); //玩家a有可能踩到玩家b if (playerpos[playernumber] == playerpos[1 - playernumber]) { console.writeline("玩家{0}踩到了玩家{1},{2}退6格", playernames[0], playernames[1], playernames[1]); playerpos[1 - playernumber] -= 6; //如果玩家a踩到了玩家b,玩家b退6格 changepos(); console.readkey(true); } //玩家a有可能踩到方块,时空隧道,暂停,地雷,幸运轮盘 else { switch (maps[playerpos[playernumber]]) { case 0: console.writeline("玩家{0}踩到了方块,安全", playernames[playernumber]); console.readkey(true); break; case 1: console.writeline("玩家{0}踩到了幸运轮盘,请选择a换位置;b轰炸对方,让对方退6格", playernames[playernumber]); string input = console.readline(); while (true) { if (input == "a") { console.writeline("玩家{0}和玩家{1}交换位置", playernames[playernumber], playernames[1 - playernumber]); //******* console.readkey(true); int temp = playerpos[playernumber]; playerpos[playernumber] = playerpos[1 - playernumber]; playerpos[1 - playernumber] = temp; console.writeline("玩家{0}和玩家{1}位置交换成功,按任意键继续游戏。", playernames[playernumber], playernames[1 - playernumber]); console.readkey(true); break; } else if (input == "b") { console.writeline("玩家{0}选择轰炸玩家{1},玩家{2}的位置退6格", playernames[playernumber], playernames[1 - playernumber], playernames[1 - playernumber]); console.readkey(true); playerpos[1 - playernumber] -= 6; changepos(); console.writeline("玩家{0}的位置退6格", playernames[1 - playernumber]); console.readkey(true); break; } else { console.writeline("只能输入a或者b,输入错误,请重新输入"); input = console.readline(); } } break; case 2: console.writeline("玩家{0}踩到了地雷,退6格", playernames[playernumber]); console.readkey(true); playerpos[playernumber] -= 6; changepos(); break; case 3: console.writeline("玩家{0}踩到了暂停,暂停一回合", playernames[playernumber]); flags[playernumber] = true; console.readkey(true); break; case 4: console.writeline("玩家{0}踩到了时空隧道,前进10格", playernames[playernumber]); playerpos[playernumber] += 10; changepos(); break; } //switch } //else changepos(); console.clear(); //清屏 drowmap(); //重新画 } /// <summary> /// 当玩家坐标发生改变的时候调用 /// </summary> public static void changepos() { if (playerpos[0] < 0) { playerpos[0] = 0; } else if (playerpos[0] >99) { playerpos[0] = 99; } else if (playerpos[1] < 0) { playerpos[1] = 0; } else if (playerpos[1] > 99) { playerpos[1] = 99; } } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。