欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C#打字游戏

程序员文章站 2022-07-16 19:47:11
...

效果图

C#打字游戏
C#打字游戏

需求分析

1、界面设计 布局
需要哪些内容控件???
容器概念
集合的概念
2、开始游戏
字母的生成 26个字母 ASCII 码值 -》键盘上任何键都对应一个ASCII码值
回忆:ASCII中 A-Z ??? a-z 97-122
字母载体 控件
字母、位置、大小、颜色
要求随机的
计时器
3、字母从上往下运动
TOP变化
注意:垃圾回收问题-》未消除的字母进行销毁-》释放资源
计时器
4、需要对应的从下往上生成字母子弹-》打掉字母
问题:怎么接受键盘输入的字母???
a、处理怎么和键盘交互-》键盘相关事件
b、字母需要转换-》ASCII
c、知识点:事件参数:EventArgs e
d、子弹从下往上运动
5、添加动画效果、音效等

代码如下

       //添加panel控件,也就是游戏界面
       Panel panel1 = new Panel();
        //创建随机
        Random sj = new Random();
        //设置飞机
        PictureBox plane = new PictureBox();
        //添加爆炸音效
        SoundPlayer sound1 = new SoundPlayer("../../sounds/Bomb.wav");
        //创建开始按钮与暂停  继续
        Button anniu1 = new Button();
        //字母出现  设置计时器1
        Timer timer1 = new Timer();
        //字母下落  设置计时器2
        Timer timer2 = new Timer();

        int num = 0;

        Label lab1 = new Label();

        private void Form1_Load(object sender, EventArgs e)
        {
            //设置窗体大小
            this.Width = 1000;
            this.Height = 700;
            //设置窗体居中显示
            int x = Screen.PrimaryScreen.WorkingArea.Width / 2 - this.Width / 2;
            int y = Screen.PrimaryScreen.WorkingArea.Height / 2 - this.Height / 2;
            this.Location = new Point(x,y);

            //设置游戏窗口属性
            panel1.Width = 750;
            panel1.Height = 650;
            panel1.Left = 5;
            panel1.Top = 10;
            //设置边框样式
            panel1.BorderStyle = BorderStyle.Fixed3D;
            Controls.Add(panel1);

            
            //选择飞机图片路径
            plane.Image = Image.FromFile("../../img/plane1.png");
            //设置控件与图片自适应大小
            plane.SizeMode = PictureBoxSizeMode.AutoSize;
            //设置飞机位置
            plane.Location = new Point(panel1.Width/2-plane.Width/2,panel1.Height-plane.Height);
            //设置飞机标签
            plane.Tag = "feiji";
            panel1.Controls.Add(plane);

            
            timer1.Tick += Timer1_Tick;
            //设置计时器的频率,也就是字母出现的频率
            timer1.Interval = 1000; 
          //timer1.Start();

            
            timer2.Tick += Timer2_Tick;
            //设置字母下落的速度
            timer2.Interval = 50;
          //timer2.Start();

            //设置按钮
            anniu1.Location = new Point(830, 100);
            anniu1.Text = "开始游戏";
            //设置三维边框
            anniu1.FlatStyle = FlatStyle.Popup;
            //设置按钮的大小
            anniu1.Size = new Size(100, 50);
            anniu1.Click += Anniu1_Click;
            this.Controls.Add(anniu1);

            Label lab2 = new Label();
            lab2.Size = new Size(300, 100);
            lab2.Location = new Point(800, 300);
            lab2.Text = "您的分数";
            lab2.Font = new Font("黑体", 24);
            this.Controls.Add(lab2);
            


            lab1.Size = new Size(100, 100);
            lab1.Location = new Point(850, 400);
            lab1.Font = new Font("黑体", 24);
            lab1.ForeColor = Color.Red;
            this.Controls.Add(lab1);

            //添加键盘事件
            this.KeyPress += Form1_KeyPress;
            KeyPreview = true;
        }


        private void Anniu1_Click(object sender, EventArgs e)
        {
            
            //点击暂停游戏按钮-》游戏暂停  按钮文本游戏开始
            if (anniu1.Text == "开始游戏")
            {
                anniu1.Text = "暂停游戏";
                //进行字母生成
                timer1.Start();
                //字母运动
                timer2.Start();
            }
            else if (anniu1.Text == "暂停游戏")
            {
                anniu1.Text = "开始游戏";
                timer1.Stop();
                timer2.Stop();
            }

        }

        private void Form1_KeyPress(object sender, KeyPressEventArgs e)
        {
            foreach (Control item in panel1.Controls)
            {
                if (item.Text==e.KeyChar.ToString())
                {
                    item.Tag = "bb";
                    //飞机出现在字母的正下方
                    plane.Left = item.Left + item.Width / 2 - plane.Width / 2;

                    //设置子弹
                    PictureBox zidan = new PictureBox();
                    //子弹文件的路径
                    zidan.Image = Image.FromFile("../../img/Ammo4.png");
                    //子弹根据控件自动拉伸
                    zidan.SizeMode = PictureBoxSizeMode.StretchImage;
                    //设置子弹大小
                    zidan.Size = new Size(10, 20);
                    //子弹的位置由飞机中间发射
                    zidan.Left = plane.Left + plane.Width / 2 - zidan.Width / 2;
                    zidan.Top = panel1.Height - plane.Height-30;
                    //设置子弹的标签
                    zidan.Tag = "zidan";
                    panel1.Controls.Add(zidan);
                    // 解决一个子弹打掉多处的相同字母
                    return;
                }
            }
        }

        private void Timer2_Tick(object sender, EventArgs e)
        {
            foreach (Control item in panel1.Controls)
            {
                if (item.Tag.ToString()=="zimu"||item.Tag.ToString()=="bb")
                {
                    lab1.Text = num.ToString();
                    //子弹向下掉落
                    item.Top +=5;
                    //如果字母掉出区域,则释放字母,防止出现子弹消除看不到的字母
                    if (item.Top>=panel1.Height)
                    {
                        item.Dispose();
                        num--;
                    }

                }
                //子弹向上发出
                if (item.Tag.ToString()=="zidan")
                {
                    item.Top-= 10;
                    
                    foreach (Control it in panel1.Controls)
                    {
                    if (it.Tag.ToString()=="bb")
                    {
                        //如果子弹顶端碰撞到字母底端
                        if (item.Top<=it.Top+it.Height&&it.Left+it.Width/2==item.Left+item.Width/2)
                        {
                                //音频开启
                                sound1.Play();
                                //释放字母与子弹
                                item.Dispose();
                                 it.Dispose();
                                num++;
                                
                                //爆炸画面
                                PictureBox bomBox = new PictureBox();
                                bomBox.Size = new Size(50,50);
                                bomBox.Tag = 0;
                                bomBox.Location = new Point(it.Left + it.Width / 2 - bomBox.Width / 2, it.Top + it.Height / 2 - bomBox.Height / 2) ;
                                bomBox.Image = imageList1.Images[0];
                                panel1.Controls.Add(bomBox);
                                Timer bomTimer = new Timer();
                                bomTimer.Tick += BomTimer_Tick;
                                bomTimer.Tag = bomBox;
                                bomTimer.Interval = 50;
                                bomTimer.Start();
                            }
                     }
                   }
                 }
            }
        }

        private void BomTimer_Tick(object sender, EventArgs e)
        {
            Timer bomtimer = (Timer)sender;
            // 是从 bomtimer中获取 tag的属性值(而这个属性值是在上面 将bomBox 赋值给其tag的)
            PictureBox picture = (PictureBox)bomtimer.Tag;
            picture.Image = imageList1.Images[(int)picture.Tag];
            picture.Tag = (int)picture.Tag + 1;
            if ((int)picture.Tag > 31)
            {
                bomtimer.Dispose();
                picture.Dispose();
            }
        }

        private void Timer1_Tick(object sender, EventArgs e)
        {
            Label zimu = new Label();
            //出现随机字母
            zimu.Text = ((char)sj.Next(97,122)).ToString();
            //字母随机颜色
            zimu.ForeColor = Color.FromArgb(sj.Next(255), sj.Next(255), sj.Next(255));
            //字母随机大小
            zimu.Font = new Font("宋体", sj.Next(24, 36));
            //字母随机位置
            zimu.Left = sj.Next(panel1.Width - zimu.Width);
            zimu.Top = -10;
            //自动调整字母控件的大小而显示完整
            zimu.AutoSize = true;
            //设置字母的标签
            zimu.Tag = "zimu";
            panel1.Controls.Add(zimu);

        }
    }
相关标签: c# 功能