C#实现winform版飞行棋

本文实例为大家分享了C#实现winform版飞行棋的具体代码,供大家参考,具体内容如下

游戏界面

游戏规则:

1、两个人轮流掷骰子红人和绿人
2、投掷出2,4,6点出门,投掷出6点可以在出门后再次投掷行走
3、地图长度共100步
4、地图中除过普通地板之外,另设六种特殊功能地板

(1) 踩到香蕉皮,退6步
(2) 踩到时空,前进6步
(3) 踩到陷阱,暂停一回合
(4) 踩到星星,可以再投掷一次
(5) 踩到移魂大法,可以做出选择与对方互换位置
(6) 踩到手枪,可以击退对方3步
(7) 踩到大炮,可以直接将对方轰炸回家(需要重新出门)

5、如果踩到对方,则对方直接回到起点,

游戏策划

1.地图面积30*13
2.每个格子30像素
3.地面的代号=0,普通地板=1,香蕉皮=2,时空=3,陷阱=4,星星=5,大挪移=6,手枪=7
红人=8,绿人=9
起点=10,终点=11
两人在同一位置=12

程序代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 飞行棋
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        Panel map = new Panel(); // 创建游戏区对象
        int[] mapList = new int[390];//存储地图数的数组
        PictureBox[] mapImg = new PictureBox[390];// 存储图片的数组
        const int size = 30;// 格子大小
        Label jiLu = new Label();
        RichTextBox msg = new RichTextBox(); //存储近况
        Random r = new Random();
        PictureBox dice = new PictureBox(); //创建骰子对象
        Panel redplayHome = new Panel(); // 红方飞机
        Panel greenplayHome = new Panel(); //绿方飞机
        private void Form1_Load(object sender, EventArgs e)
        {
            // 设置不可移动
            this.FormBorderStyle = FormBorderStyle.FixedSingle;
            // this.FormBorderStyle=FormBorderStyle.FixedToolWindow与Icon图标不可连用
            this.BackColor =Color.Plum;
            this.Size = new Size(1200, 600);
            this.Location = new Point(Screen.PrimaryScreen.Bounds.Width / 2 - this.Width / 2, Screen.PrimaryScreen.WorkingArea.Height / 2 - this.Height / 2);
            // 地图对象
            map.Width = 30 * size;
            map.Height = 13 * size;
            map.Location = new Point(10, 150);
            map.BorderStyle = BorderStyle.FixedSingle;
            this.Controls.Add(map);
            InitialGame(); //调用初始化地图图片方法
            // 红方的家
            redplayHome.Size = new Size(100, 100);
            redplayHome.BackgroundImage = Image.FromFile("../../img/select_circle.png");
            redplayHome.Location = new Point(20, map.Top - 120);
            redplayHome.BackgroundImageLayout = ImageLayout.Stretch;
            this.Controls.Add(redplayHome);
            // 绿方的家
            greenplayHome.Size = new Size(100, 100);
            greenplayHome.BackgroundImage = Image.FromFile("../../img/select_circle.png");
            greenplayHome.Location = new Point(map.Left+map.Width-greenplayHome.Width, map.Top - 120);
            greenplayHome.BackgroundImageLayout = ImageLayout.Stretch;
            this.Controls.Add(greenplayHome);
            //红飞机
            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;
            redplayHome.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;
            greenplayHome.Controls.Add(greenPlayer);
            // 记录游戏近况框
            msg.Size = new Size(260, 390);
            msg.ReadOnly = true;//设置只读
            msg.Location = new Point(map.Right,map.Top);
            msg.Font = new Font("微软雅黑", 12);
            msg.BackColor = Color.LightPink;
            this.Controls.Add(msg);
            // 游戏近况字
            jiLu.Size = new Size(100, 30);
            jiLu.Text = "游戏近况";
            jiLu.Font = new Font("楷体", 16);
            jiLu.ForeColor = Color.Maroon;
            jiLu.BackColor = Color.Aquamarine;
            jiLu.Location = new Point(msg.Left+msg.Width/2-jiLu.Width/2, map.Top-jiLu.Height);
            this.Controls.Add(jiLu);
            //骰子
            dice.Size = new Size(100, 100);
            dice.Image = Image.FromFile("../../img/roll.png");
            dice.Location = new Point(map.Left+map.Width/2-dice.Width/2,map.Top-dice.Height);
            dice.SizeMode = PictureBoxSizeMode.StretchImage;
            this.Controls.Add(dice);
            dice.MouseClick += Dice_MouseClick;
            string startmsg = "请两个人先轮流掷骰子,点大的先一步,红方先手";
            ResultTell(startmsg); //调用
        }
        // 骰子点击事件
        private void Dice_MouseClick(object sender, MouseEventArgs e)
        {
            PlayDice();
            PlayGame();
        }
        // 记录谁可以投掷   索引0代表红方,1代表绿方
        bool[] whoCan = new bool[2] { true, false };
        int[] startNum = new int[2]; // 记录双方投掷的点数
        string[] playeName = new string[2] { "红方", "绿方" };
        int[] playPostion = new int[2] { -1, -1 };// 记录两个人现在位置 没有出门默认-1
        int[] playStan = new int[2]{ -1,-1}; // 记录上飞机上一个位置的坐标索引默认为-1
        private void PlayDice() // 轮流投掷的方法  此方法为投掷为一轮
        {
            //红方先投   默认红方先投掷
            if (whoCan[0]) //默认为true
            {
                startNum[0] = r.Next(1, 7);
                ResultTell(string.Format("红方投掷出【{0}】点", startNum[0]));
                whoCan[0] = !whoCan[0]; // false赋给红方
            }
            else
            {
                whoCan[0] = !whoCan[0]; //将false变为true
            }
            // 绿方投掷
            if (whoCan[1]) // 默认为false
            {
                startNum[1] = r.Next(1, 7);
                ResultTell(string.Format("绿方投掷出【{0}】点", startNum[1]));
                whoCan[1] = !whoCan[1]; // 将true变为false
            }
            else
            {
                whoCan[1] = !whoCan[1]; //将true变为false
            }
        }
        // 控制游戏刚开始谁先行
        bool start = true;
        // 判断是不是游戏刚开始,比点数确定先行
        private void PlayGame()
        {
            // 判断是否投掷完一轮,投掷完一轮后才能判断点数谁先行
            if (start)
            {
                // 双方都投掷后,点数都相同的情况
                OutDoor();
                if (whoCan[0] && !whoCan[1]) // true && true
                {
                    ResultTell("请红方投掷");
                }
                else if (!whoCan[0] && whoCan[1]) // false && true
                {
                    ResultTell("请绿方投掷");
                }
            }
            else
            {   // 判断谁变成false,说明上次是谁投掷的
                if (whoCan[0]&&!whoCan[1]) //绿方
                {
                    PlayeReturn(1);
                }
                else if (!whoCan[0]&&whoCan[1])// 红方
                {
                    PlayeReturn(0);
                }
            }
        }
        // 是否暂停判断
        bool[] reclick = new bool[2] { false,false };
        //双方开始游戏,playIndex为索引0,1来判断是红方还是绿方
        private void PlayeReturn(int playIndex)
        {   // 判断此方位置为-1,则没有出发
            if (playPostion[playIndex] == -1)
            {
                switch (startNum[playIndex]) //判断点数 2,4,6 可以出发
                {
                    case 2:
                    case 4:
                        ResultTell(string.Format("{0}可以起步!", playeName[playIndex]));
                        playPostion[playIndex] = 0; //初始到开始位置
                        playStan[playIndex] = 0; //存储上一次位置
                        // 如果位置相同 换两个飞机的图片
                        if (playPostion[1] == playPostion[0])
                        {
                            mapImg[road[playPostion[playIndex]]].Image = imageList1.Images[2];
                        }
                        else // 如果不同则位置对应的图片
                        {
                            mapImg[road[playPostion[playIndex]]].Image = imageList1.Images[playIndex];
                        }
                        break;
                    case 6:
                        whoCan[playIndex] = true; //此方重新投掷
                        whoCan[1 - playIndex] = false;//对方不投掷
                        ResultTell(string.Format("{0}可以起步!", playeName[playIndex]));
                        playPostion[playIndex] = 0; // 初始到索引为0处
                        playStan[playIndex] = 0; // 数组存储上一次位置为0
                        // 如果位置相同 换两个飞机的图片
                        if (playPostion[1] == playPostion[0])
                        {
                            mapImg[road[playPostion[playIndex]]].Image = imageList1.Images[2];
                        }
                        else // 如果不同则位置对应的图片
                        {
                            mapImg[road[playPostion[playIndex]]].Image = imageList1.Images[playIndex];
                        }

                        ResultTell(string.Format("请{0}投掷骰子", playeName[playIndex]));
                        break;
                    default:
                        ResultTell(string.Format("很遗憾,{0}投掷出{1}点无法起步!轮到{2}投掷", playeName[playIndex], startNum[playIndex], playeName[1 - playIndex]));
                        break;
                }
                if (playPostion[0]!=-1) //红色出门
                {
                    redplayHome.Controls.Clear(); // 红色飞机的家中飞机消失
                }
                if (playPostion[1]!=-1) // 绿色出门
                {
                    greenplayHome.Controls.Clear(); //绿色飞机的家中飞机消失
                }
            }
            else // 不是-1则已经出发
            {
                // 将现在位置赋给记录上一次位置的数组中
                playStan[playIndex] = playPostion[playIndex];
                playPostion[playIndex] += startNum[playIndex]; //将点数赋给位置
                ResultTell(string.Format("{0}移动{1}步", playeName[playIndex], startNum[playIndex]));
                if (playPostion[playIndex]>=99)
                {
                    ResultTell(string.Format("{0}获胜!", playeName[playIndex]));
                    playPostion[playIndex] = 99;
                    ChangImg(playIndex);
                    return;
                }
                ChangImg(playIndex); // 改变图片
                // 判断移动完后位置
                if (playPostion[playIndex]==playPostion[1-playIndex])
                {
                    playPostion[1 - playIndex] = 0;
                    ResultTell(string.Format("厉害!{0}精准踩到{1},{0}的当前位置是{2},{1}的当前位置是{3}", playeName[playIndex], playeName[1 - playIndex], playPostion[playIndex], playPostion[1 - playIndex]));
                    playStan[1 - playIndex] = playPostion[1 - playIndex];
                    mapImg[road[playPostion[playIndex]]].Image = imageList1.Images[1 - playIndex];
                    mapImg[road[playPostion[1 - playIndex]]].Image = imageList1.Images[1 - playIndex];
                    ResultTell(string.Format("{0}开始投掷。", playeName[1 - playIndex]));
                }
                switch (mapList[road[playPostion[playIndex]]])
                {
                    case 1:  // 走到索引为1的地图上时
                        ResultTell(string.Format("{0}安全到达!当前位置是{1}", playeName[playIndex],playPostion[playIndex]));
                        ResultTell(string.Format("{0}开始投掷。", playeName[1 - playIndex]));
                        break;
                    case 2: //香蕉皮
                        ResultTell(string.Format("很不幸,{0}踩中香蕉皮,退6步!当前位置是{1}", playeName[playIndex],playPostion[playIndex]));
                        playStan[playIndex] = playPostion[playIndex];
                        //记录当前的位置 到上次位置数组中
                        playPostion[playIndex] -= 6; // 现在的位置后退6步
                        ChangImg(playIndex); // 添加对应的图片
                        ResultTell(string.Format("{0}当前的位置是{1}",playeName[playIndex],playPostion[playIndex]));
                        ResultTell(string.Format("{0}开始投掷。", playeName[1 - playIndex]));
                        break;
                    case 3: // 时空隧道
                        ResultTell(string.Format("恭喜!{0}踩中时空隧道,前进6步!当前位置是{1}", playeName[playIndex],playPostion[playIndex]));
                        playStan[playIndex] = playPostion[playIndex];// 将现在坐标存储到记录上位置的数组中
                        playPostion[playIndex] += 6; // 现在的位置后退6步
                        ChangImg(playIndex); // 添加对应的图片
                        ResultTell(string.Format("{0}当前位置是{1}", playeName[playIndex], playPostion[playIndex]));
                        ResultTell(string.Format("{0}开始投掷。", playeName[1 - playIndex]));
                        break;
                    case 4: //陷阱
                        ResultTell(string.Format("可惜!{0}踩中陷阱,暂停一回合!", playeName[playIndex]));

                        reclick[1 - playIndex] = true;
                        reclick[playIndex] = false;
                        break;

                    case 5: // 幸运星
                        ResultTell(string.Format("恭喜!踩中幸运星,再玩一回合!当前位置是{1}", playeName[playIndex],playPostion[playIndex]));
                        whoCan[playIndex] = true; //开启继续摇骰子
                        whoCan[1 - playIndex] = false;
                        ResultTell(string.Format("{0}继续投掷。", playeName[playIndex]));
                        break;
                    case 6: // 大罗移
                        ResultTell(string.Format("恭喜!{0}踩中大罗移,请选择是否移动!当前位置是{1}", playeName[playIndex],playPostion[playIndex]));
                       DialogResult dr= MessageBox.Show("是否选择移动!","大罗移!",MessageBoxButtons.YesNo);
                        if (dr==DialogResult.Yes)
                        {   //双方位置互换
                            int temp = playPostion[playIndex];
                            playPostion[playIndex] = playPostion[1 - playIndex];
                            playPostion[1 - playIndex] = temp;
                            playStan[playIndex] = playPostion[playIndex]; // 将此方现在位置赋给记录上次位置的数组
                            playStan[1 - playIndex] = playPostion[1 - playIndex];// 将另一方现在的位置赋给记录上次位置的数组
                            mapImg[road[playPostion[playIndex]]].Image = imageList1.Images[playIndex];
                            mapImg[road[playPostion[1 - playIndex]]].Image = imageList1.Images[1-playIndex];
                        }
                        ResultTell(string.Format("{0}的当前位置是{1},{2}的当前位置是{3}", playeName[playIndex], playPostion[playIndex], playeName[1 - playIndex], playPostion[1 - playIndex]));
                        ResultTell(string.Format("{0}开始投掷。", playeName[1 - playIndex]));
                        break;
                    case 7: // 手枪
                        ResultTell(string.Format("恭喜!{0}获得手枪,可选择击退对方3步!当前位置是{1}", playeName[playIndex],playPostion[playIndex]));
                        DialogResult drr = MessageBox.Show("是否选择击退对方!", "手枪!", MessageBoxButtons.YesNo);
                        if (drr==DialogResult.Yes)
                        {
                            playStan[1 - playIndex] = playPostion[1 - playIndex]; // 记录对方位置
                            playPostion[1 - playIndex] -= 3; //对方现在位置后移3个
                            mapImg[road[playPostion[1 - playIndex]]].Image = imageList1.Images[1 - playIndex];// 添加图片
                            ChangImg(1-playIndex);
                        }
                        ResultTell(string.Format("{0}被击退对方3步!当前位置是{1}", playeName[1-playIndex], playPostion[1-playIndex]));
                        ResultTell(string.Format("{0}开始投掷。", playeName[1 - playIndex]));
                        break;
                }
                /*
                 第一轮:↓
                 红色踩到后:     reclick[0红色]=reclick=false; reclick[1绿色]=reclick=true;
                 此时红色摇完,绿色摇   whcan[0]=false,whcan[1]=true;
                 reclick[playIndex] && !reclick[1-playIndex]=true:false;
                 第二轮↓
                 reclick[1绿色]=reclick=true;reclick[0红色]=reclick=false;
                 whcan[0]=true,whcan[1]=false;
                 reclick[playIndex==绿色]&&!reclick[1-playIndex==红色]=true:false;
             */

                if (reclick[playIndex]&&!reclick[1-playIndex])
                {
                    whoCan[playIndex] = true;
                    whoCan[1 - playIndex] = false;
                    reclick[playIndex] = false;
                    reclick[playIndex] = false;
                }
                /*
                 * 第二轮结束
                 whcan[0]=false,whcan[1]=true;
                 第三轮开始
                 whcan[0]=false,whcan[1]=true;
                 //三轮结束
                 whcan[0]=true,whcan[1]=false;
             */

            }
        }

        private void ChangImg(int playIndex)
        {
            // 如果位置相同 换成两个飞机的图片
            if (playPostion[1] == playPostion[0])
            {
                mapImg[road[playPostion[playIndex]]].Image = imageList1.Images[2];
            }
            else // 如果不同则位置对应的图片
            {
                mapImg[road[playPostion[playIndex]]].Image = imageList1.Images[playIndex];
            }
            // 双方已经出发,两个人在同一位置,此方图片离开后,显示另一方图片
            if (playStan[0]==playStan[1] &&playStan[0]!=-1&&playStan[0]!=-1) // 如果上次位置双方相同
            {
                mapImg[road[playStan[playIndex]]].Image = imageList1.Images[1 - playIndex];
            }
            else // 上次双方位置不同,变为之前默认的图片
            {
                switch (mapList[road[playStan[playIndex]]]) //判断上一次记录的图片
                {
                    case 0: // 地板
                        mapImg[road[playStan[playIndex]]].Image = Image.FromFile("../../img/floor.png");
                        break;
                    case 1: // 路
                        mapImg[road[playStan[playIndex]]].Image = Image.FromFile("../../img/water.gif");
                        break;
                    case 2: // 香蕉皮
                        mapImg[road[playStan[playIndex]]].Image = Image.FromFile("../../img/xj.jpg");
                        break;
                    case 3: // 时空
                        mapImg[road[playStan[playIndex]]].Image = Image.FromFile("../../img/sk.jpg");
                        break;
                    case 4: // 陷阱
                        mapImg[road[playStan[playIndex]]].Image = Image.FromFile("../../img/xianjing.jpg");
                        break;
                    case 5: // 星星
                        mapImg[road[playStan[playIndex]]].Image = Image.FromFile("../../img/xx.jpg");
                        break;
                    case 6: // 交换
                        mapImg[road[playStan[playIndex]]].Image = Image.FromFile("../../img/jh.jpg");
                        break;
                    case 7: // 手枪
                        mapImg[road[playStan[playIndex]]].Image = Image.FromFile("../../img/sq.jpg");
                        break;
                    case 10: // 开始位置
                        mapImg[road[playStan[playIndex]]].Image = Image.FromFile("../../img/game-out.jpg");
                        break;
                    case 11: // 结束位置
                        mapImg[road[playStan[playIndex]]].Image = Image.FromFile("../../img/game-over.jpg");
                        break;
                    default:
                        break;
                }
            }
        }

        // 判断投掷完一轮,相同点数,谁点数大 谁再投掷
        private void OutDoor()
        {
            //投掷完一轮,并且双方都存有点数
            if (whoCan[0] && !whoCan[1] && (startNum[0] != 0 || startNum[1] != 0))
            {   // 双方点数相同
                if (startNum[0].Equals(startNum[1]))
                {
                    ResultTell("双方点数相同,请重新投掷!");
                }
                else
                {
                    start = false; //不是第一回合
                    if (startNum[0] > startNum[1])
                    {
                        ResultTell("红方点数较大,先行一步,红方投掷");
                        whoCan[0] = true;  //红方继续投掷
                        whoCan[1] = false;
                    }
                    else
                    {
                        ResultTell("绿方点数较大,先行一步,绿方投掷");
                        whoCan[0] = false;
                        whoCan[1] = true; //绿方继续投掷
                    }
                }
            }
        }

        void InitialGame() //初始化地图
        {
            for (int i = 0; i < mapImg.Length; i++)
            {
                CreateMap();// 调用存储数字的图片
                CreateGear(); // 调用创建机关的方法 必须向有路,才能调用机关的方法
                PictureBox picture = new PictureBox();
                picture.Size = new Size(size, size);
                mapImg[i] = picture; //图片添加到数组
                switch (mapList[i]) // 判断地图数组中存储的数字,添加图片
                {
                    case 0: // 地板
                        picture.Image = Image.FromFile("../../img/floor.png");
                        break;
                    case 1: // 路
                        picture.Image = Image.FromFile("../../img/water.gif");
                        break;
                    case 2: // 香蕉皮
                        picture.Image = Image.FromFile("../../img/xj.jpg");
                        break;
                    case 3: // 时空
                        picture.Image = Image.FromFile("../../img/sk.jpg");
                        break;
                    case 4: // 陷阱
                        picture.Image = Image.FromFile("../../img/xianjing.jpg");
                        break;
                    case 5: // 星星
                        picture.Image = Image.FromFile("../../img/xx.jpg");
                        break;
                    case 6: // 交换
                        picture.Image = Image.FromFile("../../img/jh.jpg");
                        break;
                    case 7: // 手枪
                        picture.Image = Image.FromFile("../../img/sq.jpg");
                        break;
                    case 10: // 开始位置
                        picture.Image = Image.FromFile("../../img/game-out.jpg");
                        break;
                    case 11: // 结束位置
                        picture.Image = Image.FromFile("../../img/game-over.jpg");
                        break;
                    default:
                        break;
                }
                picture.SizeMode = PictureBoxSizeMode.StretchImage; //图片适应大小
                picture.Location= new Point(i % 30 * size,i/30*size);
                map.Controls.Add(picture);// 图片添加到地图中
            }
        }
        void CreateMap() //创建地图
        {
            CreateRoed();//创建路
            for (int i = 0; i < road.Length; i++)
            {
                mapList[road[i]] = 1; // 路 将路对应的索引变为1
            }
            mapList[0] = 10; //开始位置
            mapList[mapList.Length - 1] = 11; //结束位置
        }
        int[] road = new int[100];// 记录所有路的索引位置
        int[] back = {7,27,43,63,96}; // 记录香蕉皮的索引位置
        int[] forword = {10,25,33,65,80,89 };// 记录时空的索引位置
        int[] stop = { 3,20,35,50,60,70,90}; //记录陷阱的索引位置
        int[] star = { 5,28,45,71,85}; //记录星星的索引位置
        int[] change = { 4,55,75,98};//记录交换的索引位置
        int[] gun = {22,32,66,82 };//记录手枪的索引位置
        void CreateRoed() // 创建路
        {
            for (int i = 0; i < 30; i++) // 0-29的索引  向右
            {
                road[i] = i;
            }
            for (int i = 30; i <=35; i++) // 59,89,119,149,179  右下五格
            {
                road[i] = road[i - 1] + 30;
                // i=30; road[30]===>29
                // i=31; road[31-1]+30==>road[30]+30==>29+30==>59
                // i=32;road[32-1]+30==>road[31]+30==>59+30==>89
            }
            for (int i = 36; i <65 ; i++) // 向左
            {
                road[i] = road[i - 1] - 1;
                // i=36; road[36-1]-1=>road[35]-1=>179-1=>178 ...
            }
            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;
            }
        }
        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 < star.Length; i++)
            {
                mapList[road[star[i]]] = 5;// 星星
            }
            for (int i = 0; i < change.Length; i++)
            {
                mapList[road[change[i]]] = 6; // 交换
            }
            for (int i = 0; i < gun.Length; i++)
            {
                mapList[road[gun[i]]] = 7; // 手枪
            }
        }
        void ResultTell(string str)
        {
            MessageBox.Show(str);
            msg.AppendText(str + "\r\n"); // 将获取的点数添加到文本框中
        }
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2021-07-21

C#飞行棋小程序设计代码

飞行棋游戏大家应该都玩过吧,如何使用C#语言进行编写,本文实例就为大家分享了飞行棋C#实现代码,供大家参考,具体内容如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Pachee { class Program { #region 静态字段 // 关卡数量 public static int

C#飞行棋小程序设计分析

C#小程序飞行棋,程序效果图 1.设计分析 这个程序界面大致分为四部分: ① 最上面游戏名字界面 ②信息提示区 ③游戏界面区 ④游戏操作提示区 2.分区设计实现 一.游戏界面显示区,由于只需要显示出图形即可,因此直接用Console.Writeline()输出即可. 二.信息提示区,此处用于显示 游戏对战双方的姓名等信息,在游戏开始时需要由用户录入对战双方的姓名信息,因此可用Console.Readline()来读取 用户键入的值,<注:需要检查验证对战双方的姓名不可相同!> 三.游戏界面区,

C#实现飞行棋项目

本文实例为大家分享了C#实现飞行棋项目的具体代码,供大家参考,具体内容如下 1.制作游戏头部:游戏头部介绍 2.绘制地图 使用一维数组装整个地图的路线 如果这个位置是0,绘制普通格子□ 如果这个位置是1,绘制幸运轮盘◎ 如果这个位置是2,绘制地雷★ 如果这个位置是3,绘制暂停▲ 如果这个位置是4,绘制时空隧道卍 规划幸运轮盘位置 int[] luckyturn = { 6, 23, 40, 55, 69, 83 }; 规划地雷的位置 int[] landMine = { 5,13,17,33,3

C#控制台实现飞行棋游戏

本文实例为大家分享了C#实现飞行棋游戏的具体代码,供大家参考,具体内容如下 游戏截图: 管理类: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp1 { class ProgramManage { //随机数 public static Random rd = new Ran

C# 骑士飞行棋的源码(分享)

代码如下所示: 复制代码 代码如下: using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace 骑士飞行棋{    class Program    {        //在下面的数组存储我们游戏地图各各关卡        //数组的下标为0的元素对应地图上的第1格    下标为1的元素对应元素第2格...下标为

C#实现飞行棋源码

本文实例为大家分享了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; us

C#实现飞行棋小游戏

本文实例为大家分享了C#实现飞行棋小游戏的具体代码,供大家参考,具体内容如下 逻辑图 以下是掷色子的一个代码,比较有代表性,里面的逻辑和内容都已注释,可通过注释了解这一方法的运作模式. public static void RowTouZi(int playerPos) //掷色子 { //产生随机数,掷色子的随机数 Random r = new Random(); int num = r.Next(1, 7); //定义一个字符串变量 string msg = ""; //提示用户信

C#实现骑士飞行棋

前言 飞行棋小游戏是学习C#以来,接触的第一个游戏项目,根据小杨老师的思路引导,自己的代码也实现了功能,经过思路的梳理,试着不借助代码自己去实现功能,感触就是不管想的多明白,实践起来完全不一样,所以,还得多多实践,培养严谨的逻辑思维.下面看看我梳理的思路~ 游戏中界面 飞行棋流程思路 掷骰子流程 游戏运行流程 掷骰子代码 public static void RowShaiZi(int xy) { Random r = new Random();//随机数 int num = r.Next(1,

C#实现飞行棋(Winform)

本文实例为大家分享了C#实现飞行棋的具体代码,供大家参考,具体内容如下 基于Winform框架写的 不足之处请大佬指教 using System; using System.Drawing; using System.Windows.Forms; namespace 飞行棋 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //创建一个数组装游戏地板 int[] mapList = ne

C#绘制飞行棋地图小程序

1. 初始化地图,在绘制时可先将地图进行初始化,用数组来存储关卡的位置,然后利用循环给地图中 关卡所在处赋予代表关卡的值. 关键代码如下 /// <summary> /// 初始化游戏地图 /// </summary> static void InitialMap() { for (int i=0;i<Map.Length;i++) { Map[i] =0; } //用于存储关卡位置 int[] luckyTurn = { 6, 23, 40, 55, 69, 83,98 }

基于Python绘制个人足迹地图

前言 前两年,足迹地图小程序风靡朋友圈,一时间大家都流行晒自己的旅行地图.但是,笔者最近体验了好几款足迹地图的小程序,发现这些小程序虽然号称是足迹地图,但最多只是展示到省级别,无法精确到市级别,因此,笔者周末花了点时间,用Python来绘制自己的个人足迹地图,可以精确到市级别. 下面的部分,笔者将介绍如何简单地来绘制个人足迹地图. 首先我们需要安装以下Python的第三方模块: echarts-china-cities-pypkg==0.0.9 echarts-china-provinces-p

监控微信小程序中的慢HTTP请求过程详解

Fundebug 的微信小程序监控插件在 0.5.0 版本已经支持监控 HTTP 请求错误,在小程序中通过wx.request发起 HTTP 请求,如果请求失败,会被捕获并上报.时隔一年,微信小程序插件已经更新到 1.3.1, 而且提供了一个非常有用的功能,支持监控 HTTP 慢请求.对于轻量级的性能分析,可以说已经够用. 本文我们以一个天气微信小程序为例(由bodekjan开发),来演示如何监控慢请求.bmap-wx.js中的weather()函数调用百度地图小程序 api 提供的接口来获取天

微信小程序+腾讯地图开发实现路径规划绘制

现象 我们想用微信小程序实现在map>组件上自定义显示导航路径,但是目前为止官方并未给出相应的方法实现,map>组件确实有绘制点对点连线的属性polyline,但是呢我们没有一系列的坐标集合也是画不出一条路径的, 更糟糕的是即便你内置微信小程序JavaScript SDK,它目前为止也不能给你相应的返回导航路径中所有坐标集合方法实现,不信你看介绍 解决方案 那我们只能用WebService API咯, 但是不要高兴的太早,根据文档,我们要的接口参数是酱紫的 那么我们开始写(下面是菜鸡版代码,非

微信小程序地图绘制线段并且测量(实例代码)

上图: 上代码:wxml <map id="tb_map" longitude="{{longitude}}" latitude="{{latitude}}" scale="14" bindtap="clickMapTap" bindcontroltap="controltap" bindregiοnchange="regionchange" markers=&

微信小程序 地图map详解及简单实例

微信小程序 地图map 微信小程序map 地图 属性名 类型 默认值 说明 longitude Number   中心经度 latitude Number   中心纬度 scale Number 1 缩放级别 markers Array   标记点 covers Array   覆盖物 标记点 标记点用于在地图上显示标记的位置,不能自定义图标和样式 属性 说明 类型 必填 备注 latitude 纬度 Number 是 浮点数,范围 -90 ~ 90 longitude 经度 Number 是

JS绘制微信小程序画布时钟

微信小程序官方组件也提供了画布功能,下面分享一下如何创建微信小程序画布时钟. 总体思路是对pages中的一个小程序页面构建画布时钟逻辑程序,通过app.json公共设置来配置入口. 首先来看一下构建这样一个小程序所需要的目录结构 从目录结构就可以看出来这个程序是简单的单层页面,画布渲染在pages下面的index页面上. 其中对程序有实际驱动作用的代码分别在index.js,index.wxml,index.wxss和app.json这几个文件中 Index.js文件里面存放着程序的逻辑层数据,