初学WPF,做一款小游戏练习一下

以前做项目的时候有用过Silverlight,最近了解了一下WPF,做了一款简单的小游戏来练手,希望能和大家多多交流。

想法:最强大脑 牛人多多,对色彩的分辨更是让人目瞪口呆,于是我就想到做一个小游戏,简单一点,做网格状的色块,中间穿插一块不同颜色但是又非常相近的颜色块,点击该颜色块即为通关,进入下一关,下一关的色块数量+1,直到到达一个差不多的关卡后不再+1;

效果如图

说做就做,新建工程,开始实现,首先准备好一组颜色相近的颜色代码,百度HTML颜色代码,随便选取,越相邻颜色色差越小。

 1  private string[][] colors = new string[][] {
 2             new string[2]{"#7B7B7B","#8E8E8E"} ,
 3             new string[2]{"#FF5151","#ff7575"} ,
 4             new string[2]{"#ffaad5","#FFC1E0"} ,
 5             new string[2]{"#DCB5FF","#E6CAFF"} ,
 6             new string[2]{"#79FF79","#93FF93"} ,
 7             new string[2]{"#97CBFF","#ACD6FF"} ,
 8             new string[2]{"#FFFF93","#FFFFAA"} ,
 9             new string[2]{"#B766AD","#C07AB8"} ,
10             new string[2]{"#B7FF4A","#C2FF68"}
11         };

相关代码

    /// <summary>
    /// 游戏 找色差 实例
    /// </summary>
    public partial class MainWindow : Window
    {

        private int level = 2;   //当前关卡
        private double cavWidth = 0;    //容器宽度、宽高一样
        private double btnWidth = 0;    //色块宽高
        const int maxLevel = 8; //最大关卡

        //颜色数组
        private string[][] colors = new string[][] {
            new string[2]{"#7B7B7B","#8E8E8E"} ,
            new string[2]{"#FF5151","#ff7575"} ,
            new string[2]{"#ffaad5","#FFC1E0"} ,
            new string[2]{"#DCB5FF","#E6CAFF"} ,
            new string[2]{"#79FF79","#93FF93"} ,
            new string[2]{"#97CBFF","#ACD6FF"} ,
            new string[2]{"#FFFF93","#FFFFAA"} ,
            new string[2]{"#B766AD","#C07AB8"} ,
            new string[2]{"#B7FF4A","#C2FF68"}
        };
        //WPF的定时器使用DispatcherTimer类对象
        private System.Windows.Threading.DispatcherTimer dTimer = null;

        private int tmNum = 30;
        public MainWindow()
        {
            InitializeComponent();
            Load();
        }

        private void Load()
        {
            if (dTimer != null)
            {
                dTimer.Stop();
            }
            else
            {
                //Timer
                dTimer = new DispatcherTimer();
                //注:此处 Tick 为 dTimer 对象的事件( 超过计时器间隔时发生)
                dTimer.Tick += new EventHandler(dTimer_Tick);

                //设置时间:TimeSpan(时, 分, 秒)
                dTimer.Interval = new TimeSpan(0, 0, 1);
            }

            //启动 DispatcherTimer对象dTime。
            dTimer.Start();
            tmNum = 30;
            lblTime.Content = string.Format("剩余{0}秒", tmNum);

            cavWidth = cavContent.Width;
            btnWidth = cavWidth / level;
            int otherIndex = GetRandomNum(level * level); //不一样的那个

            lblLevel.Content = string.Format("第 {0} 关", level - 1);

            string[] strs = colors[GetRandomNum(colors.Length)];
            string colorBtnBg = strs[0];
            for (int i = 0; i < level; i++)
            {
                for (int j = 0; j < level; j++)
                {
                    //向容器中添加一个色块(按钮)
                    Button btn = new Button()
                    {
                        Margin = new Thickness(btnWidth * i, btnWidth * j, 0, 0),
                        Background = new SolidColorBrush((Color)System.Windows.Media.ColorConverter.ConvertFromString(colorBtnBg)),
                        BorderThickness = new Thickness(1),
                        BorderBrush = Brushes.Black,
                        Width = btnWidth,
                        Height = btnWidth
                    };
                    //随机生成的色块编号,颜色换成相近颜色,当点击该色块表示找出差异,进入游戏下一关
                    if (otherIndex == i * level + j)
                    {
                        btn.Background = new SolidColorBrush((Color)System.Windows.Media.ColorConverter.ConvertFromString(strs[1]));
                        btn.Click += btn_Click;
                    }
                    cavContent.Children.Add(btn);
                }
            }

        }

        /// <summary>
        /// 计时
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dTimer_Tick(object sender, EventArgs e)
        {
            lblTime.Content = string.Format("剩余{0}秒", tmNum);
            if (tmNum < 10)
            {
                lblTime.Foreground = Brushes.Red;
            }
            if (tmNum <= 0)
            {
                dTimer.Stop();
                MessageBoxResult result = MessageBox.Show("时间到,还未完成游戏,是否继续?", "Game Over", MessageBoxButton.YesNo);
                if (result == MessageBoxResult.Yes)
                {
                    level = 2;
                    Load(); //重置游戏
                }
                else
                {
                    this.Close();
                }
            }
            tmNum--;

        }

        /// <summary>
        /// 点击不同颜色的色块时触发
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void btn_Click(object sender, RoutedEventArgs e)
        {
            cavContent.Children.Clear();
            //达到最大关卡时数量不在增多,否则每次多一排一列色块
            if (level <= maxLevel)
            {
                level = level + 1;
            }
            Load();
        }

        /// <summary>
        /// 取随机数
        /// </summary>
        /// <param name="maxNum">0-最大区间</param>
        /// <returns></returns>
        public int GetRandomNum(int maxNum)
        {
            Random radom = new Random();
            return radom.Next(maxNum);
        }
    }

  

时间: 2024-12-29 06:53:15

初学WPF,做一款小游戏练习一下的相关文章

突发奇想想学习做一个HTML5小游戏

前言: 最近一期文化馆轮到我分享了,分享了两个,一个是关于童年教科书的回忆,一个是关于免费电子书的.最后我觉得应该会不敌web,只能说是自己在这中间回忆了一下那个只是会学习的年代,那个充满梦想的年代.有人说如果一个人开始回忆童年的时候,那么他开始变老了,不知道是不是这样一个原因,我突然想起了很多以前的老朋友,开始想起了一些童年时期的玩伴.也就想做这样一款简单的游戏,也只是单纯的想回忆一下童年. 计划: 游戏其实很简单,我们把它叫着裤裆棋,又叫什么狗卵坨还是什么的,有些记忆模糊了,反正大致是这样子

Chrome 中的彩蛋,一款小游戏,你知道吗?

今天看到一篇文章,介绍chrome中的彩蛋,带着好奇心进去看了一眼,没想到发现了一款小游戏,个人觉得还不错,偶尔可以玩一下,放松放松心情!^_^ 当 Chrome 无法连接到互联网时, 或者上着网突然掉线,刷新页面时报错, 此时错误提示上方都会有一只小短手霸王龙.嗯,表面上看起来也没什么特别之处,因为小短手在早期 Chrome 中有了.但一按空格键(或方向键 ↑ ),你就打开了一扇神奇之门! 往下看,小短手这不就跑起来了么! 按下空格键(或方向键 ↑ ),小短手就会跳.如果碰到仙人掌,游戏就结束

three.js-打造微信爆款小游戏跳一跳

第1章 课程介绍介绍了微信小游戏的概念以及相关的由来,从宏观上对于微信小游戏的定位和价值有一个明确的认识 1-1 导学介绍1-2 什么是微信小游戏1-3 微信小游戏与H5小游戏1-4 为什么要学习微信小游戏第2章 微信小游戏平台与特性讲了微信小游戏平台的相关特性,包括微信小游戏工程的建立,微信小游戏开发工具的详细使用,以及微信小游戏相关API的实战等 2-1 微信开发者工具介绍2-2 小游戏项目工程初始模板建立2-3 微信开发者工具(模拟器介绍)2-4 微信开发者工具(编辑器介绍)2-5 微信开

css3+jquery+js做的翻翻乐小游戏

主要是为了练习一下css3的3D翻转功能,就做了这么个小游戏,做的比较粗糙,但是效果看的见. 主要用到的css3代码如下: html结构: 1 <div class="container"> 2 <div class="side"> 3 4 <div class="front"> 5 <!-- 正面 --> 6 </div> 7 8 <div class="back&qu

做了一个小游戏,结项目,数数坑

这是一个微信端的,投篮小游戏. 游戏规则如下: 点击开始,进入游戏,按住右下角红色按钮控制投篮力度,3次进球以后游戏难度将会升级.45秒内您的进球数将会计入排行榜,最终排行榜上的名次可以获得相应奖励,快来投篮冲榜领福利吧. 一.动画效果 做微信项目,相信大家和我一样,已经习惯了放弃使用jQuery,转而使用zepto.但是zepto并没有集成animate()方法.因此若想使用动画,用不想做兼容处理,最高效的方法是重拾jQuery. $(selector).animate(styles,spee

你的智商几年级,来体验这款小游戏吧!

数学再不学,脑子都笨了,闲暇的时候,写了一个小游戏,天才帝一步,欢迎大家下载,大人小孩能够比赛的! [技术支持]: 天才帝一步里面的后台数据和官方站点所有由"Bmob移动云服务"提供全套支持,须要了解的同学能够直接登录:www.bmob.cn 或者直接回复你的问题给我. [游戏简单介绍]: 天才帝一步,比比谁速度!自从用了"天才帝一步",妈妈再也不操心我的算术了! 1.经典模式:以最短时间答对20答题,俗称小旋风模式: 2.禅模式:就是20秒内答尽可量多题的模式,磨

开发日记:KBEngine+Unity+php做个扑克小游戏-DAY2

怎么办,这很尴尬,为啥呢,因为kbe的某些原因让我放弃了使用它所以本打算继续更新的,说一下原因: 在DAY1中我希望kbe能够开启一个http服务,并让php端做一个web请求将消息传递给对应的用户,可是这个http服务我是写起来了,发送消息的函数也写出来(花了不少时间,kbe的注释和文档都不多,特别是kbe把BaseHttpServer这个python库另外弄了个名字,用http.server import as 才导入成功)尴尬的就是http服务和发消息的函数怎么也放不到一起: 1.一旦某个

自编的一款小游戏【比较蒟蒻】

直接上代码吧: #include<bits/stdc++.h> #include<windows.h> using namespace std; char P; int player,num=0,player1_e=0,player2_e=0,player1_d=0,player2_d=0,t=0,n1=0; int player1_m=0,player2_m=0,n2=0,true1=0,true2=0; void game();void shop();void home();v

KBEngine+Unity+php做个扑克小游戏-DAY1

写这篇博客的时候其实我已经开发了一大部分了~ php 部分,unity 部分 都已经差不多了 ,由于KBEngine(简称kbe)完全没接触过,其实很多地方php部分的逻辑都可以直接挪到kbe中完成.实际为了开发效率,同样的逻辑目前我还是用php写起来飞快,因此项目的组成有一些小奇葩 现在正在琢磨kbe和 php 部分的衔接问题: 1.进入房间时,调用进入接口 /room/join 2.准备状态,调用接口 /game/prepare 3. a.当php检测到准备玩家数量 preparedPlay