C#实现数字华容道游戏

本文实例为大家分享了C#实现数字华容道游戏的具体代码,供大家参考,具体内容如下

代码如下:

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 WindowsFormsApp6
{undefined
    public partial class Form1 : Form
    {undefined
        public Form1()
        {undefined
            InitializeComponent();
        }

        const int N = 4;
        Button[,] buttons = new Button[N, N];

        private void Form1_Load(object sender, EventArgs e)
        {undefined
            //产生所有按钮
            GenerateAllButtons();
        }

        private void button1_Click(object sender, EventArgs e)
        {undefined
            Shuffle();
        }

        //打乱顺序
        void Shuffle()
        {undefined
            //多次随机交换两个按钮
            Random rnd = new Random();
            for (int i=0;i<100;i++)
            {undefined
                int a = rnd.Next(N);
                int b = rnd.Next(N);
                int c = rnd.Next(N);
                int d = rnd.Next(N);
                Swap(buttons[a, b], buttons[c, d]);
            }
        }

        //生成所有按钮
        void GenerateAllButtons()
        {undefined
            int x0 = 100, y0 = 10, w = 45, d = 50;
            for(int r=0;r<N;r++)
                for(int c = 0; c < N; c++)
                {undefined
                    int num = r * N + c;
                    Button btn = new Button();
                    btn.Text = (num + 1).ToString();
                    btn.Top = y0 + r * d;
                    btn.Left = x0 + c * d;
                    btn.Width = w;
                    btn.Height = w;
                    btn.Visible = true;
                    btn.Tag = r * N + c;//这个数据用来表示它所在的行列位置
                    //注册事件
                    btn.Click += new EventHandler(btn_Click);
                    buttons[r, c] = btn;
                    this.Controls.Add(btn);
                }
            buttons[N - 1, N - 1].Visible = false;//最后一个不可见
        }

        //交换两个按钮
        void Swap(Button btna,Button btnb)
        {undefined
            string t = btna.Text;
            btna.Text = btnb.Text;
            btnb.Text = t;

            bool v = btna.Visible;
            btna.Visible = btnb.Visible;
            btnb.Visible = v;
        }

        //按钮点击事件处理
        void btn_Click(object sender, EventArgs e)
        {undefined
            Button btn = sender as Button;//当前点中按钮
            Button blank= FindHiddenButton();//空白按钮
            //判断与空白按钮是否相邻,如果是,交换
            if (IsNeighbor(btn, blank))
            {undefined
                Swap(btn, blank);
                blank.Focus();
            }

            //判断是否完成了
            if (ResultIsOk())
            {undefined
                MessageBox.Show("ok");
            }
        }

        //查找要隐藏的按钮
        Button FindHiddenButton()
        {undefined
            for (int r = 0; r < N; r++)
                for (int c = 0; c < N; c++)
                {undefined
                    if (!buttons[r, c].Visible)
                    {undefined
                        return buttons[r, c];
                    }
                }
            return null;
        }

        //判断是否相邻
        bool IsNeighbor(Button btnA, Button btnB)
        {undefined
            int a = (int)btnA.Tag; //Tag中记录是行列位置
            int b = (int)btnB.Tag;
            int r1 = a / N, c1 = a % N;
            int r2 = b / N, c2 = b % N;

            if (r1 == r2 && (c1 == c2 - 1 || c1 == c2 + 1) //左右相邻
                || c1 == c2 && (r1 == r2 - 1 || r1 == r2 + 1))
                return true;
            return false;
        }

        //检查是否完成
        bool ResultIsOk()
        {undefined
            for (int r = 0; r < N; r++)
                for (int c = 0; c < N; c++)
                {undefined
                    if (buttons[r, c].Text != (r * N + c + 1).ToString())
                    {undefined
                        return false;
                    }
                }
            return true;
        }
    }
}

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

(0)

相关推荐

  • 基于C#的winform实现数字华容道游戏

    数字华容道游戏类似于拼图游戏,只需将数字1~15按顺序排好即可.该游戏逻辑比较简单,易于编程实现. 游戏界面如图: 编程准备: 所需控件:label 用于显示时间, 一个重新开始的button,一个panel容器来存放数字块(按钮),再加一个timer来计时及判断游戏是否结束. 主要代码: variables类: class variables     {         public static int[] a = new int[16] { 1, 2, 3, 4, 5, 6, 7, 8,

  • C#实现数字华容道游戏

    本文实例为大家分享了C#实现数字华容道游戏的具体代码,供大家参考,具体内容如下 代码如下: 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.Windo

  • 基于Vue3实现数字华容道游戏的示例代码

    目录 前言 环境 思路 实现 GameCnt GameTool GamePass GameTip Menu 最后 前言 恰逢春之四月,天气忽热忽凉,遇游戏大赛,以笨拙之技,书一篇小文. 游戏规则:存在n*n的格子,需要将它们按数字顺序或图片顺序一一还原即可. 环境 主要环境: vue3 version:3.2.4 vite version:2.5.0 vue-router version:4.0.14 注:这个游戏的路由使用的是自动路由插件 主要插件: windicss version:3.5.

  • 39条Python语句实现数字华容道

    原以为用Python编写"数字华容道"游戏可能需要很多代码,完成后发现只用了39条语句,可见Python的强大. 编程的思路如下,使用9个tkinter库的Button按钮,按3行3列排列,每个按钮的标题是1到8和空白中的一个,初始标题所显示的数字和空白随机排列.当一个按钮被单击后,调用事件函数,该函数有两个参数,该按钮的所在位置的行列号.在函数中首先判断该按钮(行号为x,列号为y)是否和标题为空白的按钮(行号为x0,列号为y0)相邻,相邻条件是(x-x0)绝对值+(y-y0)绝对值=

  • Android数字华容道小游戏开发

    目的 上周新一期的最强大脑出来了,虽然上季被称为最强黑幕,不过呢.我决定还是看看= =.它里面第一关是叫做数字华容道.说白了,就是和拼图差不多.一开始我准备下一个玩玩的.结果没搜到.所以决定写了一个.最后效果差不多是这样: 思路以及实现 首先,我们应该考虑如何去实现这个效果.细想一下,其实和之前的2048有点像,但是又不是完全一直.于是,便又折腾了一波.这次布局和内容项参考之前2048的,下面放上代码: 自定义一个frame layout,我们先绘制里面的数字: private void ini

  • jQuery实现数字华容道小游戏(实例代码)

    <!DOCTYPE html> <html> <head><meta charset="utf-8"> <title>数字华容道</title> <script type="text/javascript" src="jquery.min.js"></script> <style type="text/css"> *{

  • python实现数字华容道

    制作Python数字华容道(可选择关卡),供大家参考,具体内容如下 由于比赛需要,我这边制作了一份数字华容道,内含有3,4,5阶的数字华容道,开头在壳窗口内选择,运用了随机数模块(random)和图形化用户界面(tkinter) 下面是程序完整代码 # coding:utf-8 # """ #============================================================ 作者:@Qss 2021年3月20日起草 2021年3月21日完

  • go语言实现猜数字小游戏的方法

    本文实例讲述了go语言实现猜数字小游戏的方法.分享给大家供大家参考.具体分析如下: 随机生成一个数字,输入一个数字看是否匹对,匹配则结速,反之提示是大了还是小了 复制代码 代码如下: package main import (     "bufio"     "fmt"     "math/rand"     "os"     "strconv"     "time" ) var (  

  • JS数字抽奖游戏实现方法

    本文实例讲述了JS数字抽奖游戏实现方法.分享给大家供大家参考.具体实现方法如下: <!doctype html> <html> <head> <meta charset="utf-8"> <title>新年网页抽奖程序</title> <style type="text/css"> * {margin:0; padding:0;} ul,li {list-style-type:non

  • Java编写猜数字小游戏

    本文实例讲述了java实现的简单猜数字游戏代码.分享给大家供大家参考. 以下是Java语言写的一个猜数字小游戏引用片段: import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; //主函数 public class calssOne { public static void main(String[] args) { //shit+Ctrl+o int result; //随机产生一个

随机推荐