千家信息网

如何用C#实现飞行棋

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章给大家介绍如何用C#实现飞行棋,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。基于Winform框架写的不足之处请大佬指教using System;using System
千家信息网最后更新 2026年11月02日如何用C#实现飞行棋

这篇文章给大家介绍如何用C#实现飞行棋,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

基于Winform框架写的不足之处请大佬指教

using System;using System.Drawing;using System.Windows.Forms;namespace 飞行棋{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } //创建一个数组装游戏地板 int[] mapList = new int[390]; //创建装图片的数组 PictureBox[] mappic = new PictureBox[390]; //创建路的数组 int[] road = new int[100]; //创建地图 Panel map = new Panel(); int size = 30; //创建骰子 PictureBox dice = new PictureBox(); //初始位置的停放区域红色的 Panel plan1 = new Panel(); //初始位置的停放区域绿色的 Panel plan2 = new Panel(); private void Form1_Load(object sender, EventArgs e) { this.Size = new Size(1200, 600); this.FormBorderStyle = FormBorderStyle.FixedSingle; this.Location = new Point(250, 100); this.BackColor = Color.Wheat; map.Size = new Size(30*size, 13*size); map.BorderStyle = BorderStyle.FixedSingle; map.Location = new Point(40,160); this.Controls.Add(map); //显示图片的方法 Init(); plan1.Size = new Size(100, 100); plan1.Location = new Point(map.Left, map.Top - 120); plan1.BackgroundImage = Image.FromFile("../../img/circle.png"); plan1.BackgroundImageLayout = ImageLayout.Stretch; this.Controls.Add(plan1); plan2.Size = new Size(100, 100); plan2.Location = new Point(map.Left+120 ,map.Top - 120); plan2.BackgroundImage = Image.FromFile("../../img/circle.png"); plan2.BackgroundImageLayout = ImageLayout.Stretch; this.Controls.Add(plan2); PictureBox redPlayer = new PictureBox(); redPlayer.Size = new Size(80, 80); redPlayer.Image = Image.FromFile("../../img/red.png"); redPlayer.Location = new Point(10, 10); redPlayer.SizeMode = PictureBoxSizeMode.StretchImage; plan1.Controls.Add(redPlayer); PictureBox greenPlayer = new PictureBox(); greenPlayer.Size = new Size(80, 80); greenPlayer.Image = Image.FromFile("../../img/green.png"); greenPlayer.Location = new Point(10, 10); greenPlayer.SizeMode = PictureBoxSizeMode.StretchImage; plan2.Controls.Add(greenPlayer); //创建对话框 tall.Size = new Size(200, 500); tall.Location = new Point(map.Right + 20, 50); tall.ReadOnly = true; this.Controls.Add(tall); //玩家一: name.Size = new Size(100, 30); name.Location = new Point(45,10); this.Controls.Add(name); //玩家二: names.Size = new Size(100, 30); names.Location = new Point(160,10 ); this.Controls.Add(names); btn.Location = new Point(300,10); btn.Text = "开始游戏"; btn.Size = new Size(100, 30); btn.BackColor = Color.Pink; btn.Click += Btn_Click; this.Controls.Add(btn); //骰子 dice.Size = new Size(80, 80); dice.Image = Image.FromFile("../../img/roll.png"); dice.Location = new Point(map.Right-160,map.Top-120); dice.SizeMode = PictureBoxSizeMode.StretchImage; this.Controls.Add(dice); dice.MouseClick += Dice_MouseClick; } private void Btn_Click(object sender, EventArgs e) { //创建初始的弹框 Tall(string.Format("请两人投掷骰子,{0}先手,点大的先走",name.Text)); playName[0] = name.Text; playName[1] = names.Text; tall.Focus(); } TextBox name = new TextBox(); TextBox names = new TextBox(); Button btn = new Button(); //创键记录的对话框 RichTextBox tall = new RichTextBox(); //创建随机 Random r = new Random(); // 轮流投掷骰子 0代表红方 1代表绿方 bool[] playStart = new bool[2] { true, false }; //记录双方当前的位置 int[] playPosition = new int[2] { -1, -1 }; int[] playStand = new int[2] { -1, -1 }; // 记录骰子的点数 int[] shaizi = new int[2]; string[] playName = new string[2]; //数组存储点数 int[] num = new int[2] ; //1.轮流投掷筛子决定谁先出门 private void Dice_MouseClick(object sender, MouseEventArgs e) { PlayDice(); PlayGame(); } private void PlayDice() { //红方投掷 红方为true 投掷完之后变为false 绿方投掷 if (playStart[0]) { shaizi[0] = r.Next(1,7); Tall(String.Format("{1}投掷出{0}点", shaizi[0],playName[0])); playStart[0] = !playStart[0]; } else { playStart[0] = !playStart[0]; } //绿方投掷 绿方为false 绿方投掷完之后变为true .轮到红方投掷 if (playStart[1]) { shaizi[1] = r.Next(1, 7); Tall(String.Format("{1}投掷出{0}点", shaizi[1],playName[1])); playStart[1] = !playStart[1]; } else { playStart[1] = !playStart[1]; } } //决定游戏谁先手 private void OutDoor() { //红方为true 绿方为false的时候一回合完了 一回合完之后对应的骰子数都不为0 if (playStart[0]&&!playStart[1]&&(shaizi[0]!=0||shaizi[1]!=0)) { if (shaizi[0] == shaizi[1]) { Tall("双方点数相同,请重新投掷"); } else { //第二回合 st = false; if (shaizi[0] > shaizi[1]) { Tall(String.Format("{0}点数较大,先行一步,{0}投掷",name.Text)); playStart[0] = true; playStart[1] = false; } if (shaizi[0] < shaizi[1]) { Tall(String.Format("{0}点数较大,先行一步,{0}投掷", names.Text)); playStart[0] = false; playStart[1] = true; } } } } bool st = true; //控制游戏谁先走 private void PlayGame() { //判断游戏刚开始时候比点数先行 if (st == true) { OutDoor(); //都为false的时候绿方投掷 if (!playStart[0]&&playStart[1]) { Tall(string.Format("请{0}投掷",names.Text)); }//都为true的时候红方投掷 else if(playStart[0]&&!playStart[1]) { Tall(string.Format("请{0}投掷!",name.Text)); } } else { if (playStart[0] && !playStart[1])//如果绿方大, 绿方为true { PlayReturn(1); }//红方 else if (!playStart[0] && playStart[1]) { PlayReturn(0); } } } ///

/// 双方轮流游戏 /// /// 传入参数index0为红方 1为绿方 bool[] re = new bool[2] { false, false }; private void PlayReturn(int index) { //都没出门 if (playPosition[index] == -1) { switch (shaizi[index]) { case 2: case 4: Tall(String.Format("{0}可以起步", playName[index])); playPosition[index] = 0; playStand[index] = 0; //如果两个位置相等 if (playPosition[1] == playPosition[0]) { mappic[road[playPosition[index]]].Image = imageList1.Images[2]; } else { mappic[road[playPosition[index]]].Image = imageList1.Images[index]; } break; case 6: playStart[index] = true; playStart[1 - index] = false; Tall(String.Format("{0}可以起步", playName[index])); playPosition[index] = 0; playStand[index] = 0; if (playPosition[1] == playPosition[0]) { mappic[road[playPosition[index]]].Image = imageList1.Images[2]; } else { mappic[road[playPosition[index]]].Image = imageList1.Images[index]; } Tall(String.Format("请{0}投掷骰子", playName[index])); break; default: Tall(String.Format("很遗憾,{0}投掷出{1}点无法起步,轮到{2}投掷", playName[index], shaizi[index], playName[1 - index])); break; } if (playPosition[0] != -1) { plan1.Controls.Clear(); } if (playPosition[1] != -1) { plan2.Controls.Clear(); } } else { //改变位置之前记录好之前的位置 playStand[index] = playPosition[index]; playPosition[index] += shaizi[index]; if (playPosition[index] >= 99) { MessageBox.Show(playName[index] + "获胜"); playPosition[index] = 99; //改变图片 Change(index); return; } Tall(string.Format("{0}移动了{1}步", playName[index], shaizi[index])); //改变图片 Change(index); //判断移动完成之后的位置是如何 if (playPosition[index] == playPosition[1 - index]) { playPosition[1 - index] = 0; playStand[1 - index] = playPosition[1 - index]; Tall(String.Format("厉害!{0}精准的将{1}踩回原点,{0}当前的位置是{2},{1}当前的位置是{3},", playName[index], playName[1 - index], playPosition[index], playPosition[1 - index])); mappic[road[playPosition[index]]].Image = imageList1.Images[index]; mappic[road[playPosition[1 - index]]].Image = imageList1.Images[1 - index]; Tall(string.Format("{0}开始投掷", playName[1 - index])); } switch (mapList[road[playPosition[index]]]) { case 1: Tall(string.Format("{0}安全到达!当前位置是{1}", playName[index], playPosition[index])); Tall(String.Format("{0}开始投掷!", playName[1-index])); break; case 2: Tall(string.Format("很不幸,{0}踩中了香蕉皮,后退6步,当前位置是{1}", playName[index], playPosition[index])); playStand[index] = playPosition[index]; playPosition[index] -= 6; Change(index); /*Tall(string.Format("{0}当前位置是{1}", playName[index], playPosition[index]));*/ Tall(string.Format("{0}开始投掷", playName[1 - index])); break; case 3: Tall(String.Format("恭喜!{0}踩中时空隧道,前进6步!当前位置是{1}", playName[index], playPosition[index])); playStand[index] = playPosition[index]; playPosition[index] += 6; Change(index); /*Tall(string.Format("{0}当前位置是{1}", playName[index], playPosition[index]));*/ Tall(string.Format("{0}开始投掷", playName[1 - index])); break; case 4: Tall(string.Format("好可惜,{0}踩中了陷阱,暂停一回合", playName[index])); re[index] = true; re[1 - index] =false; break; case 5: Tall(string.Format("真好,{0}踩中幸运星,在玩一回合!当前位置是{1}", playName[index], playPosition[index])); playStart[index] = true; playStart[1 - index] = false; Tall(string.Format("{0}继续投掷!", playName[index])); break; case 6: Tall(string.Format("真好!{0}踩中秘籍,请选择措施!当前位置是{1}", playName[index], playPosition[index])); DialogResult result = MessageBox.Show("是否与对方更换位置!", "移魂大法", MessageBoxButtons.YesNo); if (result == DialogResult.Yes) { int temp = playPosition[index]; playPosition[index] = playPosition[1 - index]; playPosition[1 - index] = temp; playStand[index] = playPosition[index]; playStand[1 - index] = playPosition[1 - index]; mappic[road[playPosition[index]]].Image = imageList1.Images[index]; mappic[road[playPosition[1 - index]]].Image = imageList1.Images[1 - index]; } Tall(string.Format("{0}当前位置是{1},{2}的位置是{3}", playName[index], playPosition[index], playName[1 - index], playPosition[1 - index])); Tall(string.Format("{0}开始投掷。", playName[1 - index])); break; case 7: Tall(string.Format("幸运!{0}获得手枪,可选择击退对方3步!当前位置是{1}", playName[index], playPosition[index])); DialogResult res = MessageBox.Show("是否选择击退对方三步!", "手枪!", MessageBoxButtons.YesNo); if (res == DialogResult.Yes) { playStand[1 - index] = playPosition[1 - index]; playPosition[1 - index] -= 3; mappic[road[playPosition[1 - index]]].Image = imageList1.Images[1 - index]; Change(1 - index); } /* Tall(string.Format("{0}被击退对方3步!当前位置是{1}", playName[1 - index], playPosition[1 - index]));*/ Tall(string.Format("{0}开始投掷。", playName[1 - index])); break; default: break; } if (re[index] && !re[1 - index]) { playStart[index] = true; playStart[1 - index] = false; re[index] = false; re[1 - index] = false; } } } private void Change( int index) { //如果移动完之后再同一个位置 if (playPosition[1] == playPosition[0]) { mappic[road[playPosition[index]]].Image = imageList1.Images[2]; } else {//移动完成之后显示对应玩家的图片 mappic[road[playPosition[index]]].Image = imageList1.Images[index]; } //原本位置图片的显示,如果两人在同一个位置站着,并且都在路上自己离开之后,留下对方的图片在原地在起点的时候 if (playStand[0]==playStand[1]&&playStand[0]!=-1&&playStand[1]!=-1&&playPosition[1-index]==0) { mappic[road[playStand[index]]].Image = imageList1.Images[1 - index]; mappic[road[playPosition[index]]].Image = imageList1.Images[ index]; } else //如果两人不再同一位置判断之前的脚下是什么 { switch (mapList[road[playStand[index]]]) { //整个地图的图片 case 0: mappic[road[playStand[index]]].Image = Image.FromFile("../../img/water.gif"); break; //游戏区域的路 case 1: mappic[road[playStand[index]]].Image = Image.FromFile("../../img/grass.png"); break; case 2: mappic[road[playStand[index]]].Image = Image.FromFile("../../img/sk.jpg"); break; case 3: mappic[road[playStand[index]]].Image = Image.FromFile("../../img/xj.jpg"); break; case 4: mappic[road[playStand[index]]].Image = Image.FromFile("../../img/xianjing.jpg"); break; case 5: mappic[road[playStand[index]]].Image = Image.FromFile("../../img/xx.jpg"); break; case 6: mappic[road[playStand[index]]].Image = Image.FromFile("../../img/jh.jpg"); break; case 7: mappic[road[playStand[index]]].Image = Image.FromFile("../../img/sq.jpg"); break; case 10: mappic[road[playStand[index]]].Image = Image.FromFile("../../img/start.png"); break; case 11: mappic[road[playStand[index]]].Image = Image.FromFile("../../img/end.bmp"); break; } } } void Tall(string str) { MessageBox.Show(str); tall.AppendText(str+"\r\n"); } //创建一个显示所有图片的方法 void Init() { //先调用地图的 CreateMap(); //在调用道具的 先有地图再有道具 CreateGear(); for (int i = 0; i < mapList.Length; i++) { //创建图片每循环一次创建一个 PictureBox pic = new PictureBox(); //图片的大小等于30 pic.Size = new Size(size, size); //判断mapList索引对应的东西 switch (mapList[i]) { //整个地图的图片 case 0: pic.Image = Image.FromFile("../../img/water.gif"); break; //游戏区域的路 case 1: pic.Image = Image.FromFile("../../img/grass.png"); break; case 2: pic.Image = Image.FromFile("../../img/sk.jpg"); break; case 3: pic.Image = Image.FromFile("../../img/xj.jpg"); break; case 4: pic.Image = Image.FromFile("../../img/xianjing.jpg"); break; case 5: pic.Image = Image.FromFile("../../img/xx.jpg"); break; case 6: pic.Image = Image.FromFile("../../img/jh.jpg"); break; case 7: pic.Image = Image.FromFile("../../img/sq.jpg"); break; case 10: pic.Image = Image.FromFile("../../img/start.png"); break; case 11: pic.Image = Image.FromFile("../../img/end.bmp"); break; } //拉伸图片 pic.SizeMode = PictureBoxSizeMode.StretchImage; mappic[i] = pic; //算出图片的坐标 pic.Left = i % 30 * size; pic.Top = i / 30 * size; map.Controls.Add(pic); } } //给整个地图添加图片 void CreateMap() { //调用铺路的方法 CreateRoad(); for (int i = 0; i < road.Length; i++) { mapList[road[i]] = 1; } //起始图片的索引位置 mapList[0] = 10; //结束图片对应的索引位置 mapList[mapList.Length - 1] = 11; } //算出路怎么铺 void CreateRoad() { //111111 // 1 //111111 //1 //111111 //第一行铺的路30个 for (int i = 0; i < 30; i++) { road[i] = i; } //第2个列的路 for (int i = 30; i <= 35; i++) { road[i] = road[i - 1] + 30; } //第三个路 for (int i = 36; i <65; i++) { road[i] = road[i - 1] - 1; } //第4列的路 for (int i = 65; i <=70; i++) { road[i] = road[i - 1] + 30; } //第五行的数 for (int i =71; i <100; i++) { road[i] = road[i - 1] + 1; } } //定义道具的数组 int[] back = { 7, 27, 42, 62, 73, 96 }; int[] forword = { 10, 25, 33, 65, 80, 88 }; int[] stop = { 3, 20, 35, 50, 60, 70, 90 }; int[] star = { 5, 28, 45, 71, 85 }; int[] change = { 4, 55, 75, 98 }; int[] gun = { 11, 32, 66, 83 }; //定义一个道具放置位置的方法 void CreateGear() { for (int i = 0; i < back.Length; i++) { //将地图对应的路然后将索引换成对应的道具 mapList[road[back[i]]] = 2; } for (int i = 0; i < forword.Length; i++) { mapList[road[forword[i]]] = 3; } for (int i = 0; i < stop.Length; i++) { mapList[road[stop[i]]] = 4; } for (int i = 0; i

关于如何用C#实现飞行棋就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

位置 图片 红方 地图 骰子 点数 回合 对方 时候 道具 区域 数组 方法 索引 移动 飞行棋 飞行 双方 玩家 方为 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网是第几次科技革命的成果 互联网科技卖菜 狮子座互联网科技 远信互联网科技 杭州互联网科技公司 朗涯互联网科技 腾讯科技 互联网女皇 沃里互联网科技 上游互联网科技 天扬科技互联网广告 卓越科技互联网 招聘 玉溪新华互联网科技好不好 四川慕妮娅互联网科技有限公司 梅州GM互联网络科技有限公司 浙南科技城互联网大厦招聘 宁波跨境商互联网科技有限公司 艺电能源互联网科技有限公司招聘 现代互联网科技公司 重庆科技产业互联网有哪些 山东亿川互联网科技有限责任公司 互联网中国科技 朗涯互联网科技 长亮科技互联网金融 互联网科技类展会 互联网科技股午盘股票涨跌 湖北码尼互联网科技有限公司电话 速维有品互联网信息科技(苏州)有限公司 华中科技大学互联网的牛人 上海科技产业互联网平台 互联网企业和网络科技有限公司
0