C#窗體應用實現打字母遊戲案例(超詳細步驟)

一.編程思路

1.簡單的界面實現;
2.字母的生成,以及位置的確定;
3.字母的自動下落;
4.飛機的生成以及位置的確定;
5.子彈的生成;
6.子彈與字母位置相同時,字母消失;
7.當字母消失時出現爆炸效果,以及爆炸音效;

二.編程重點

1.控制字母的生成,以及自動下落;
2.飛機位置的確定;
3.子彈的生成以及位置的確定;
4.爆炸效果以及爆炸音效;

三.代碼實現

1.界面的佈局的劃分,主要爲遊戲區域和控制區域;
//實例化計時器
 Timer timer1 = new Timer();
 Timer timer2 = new Timer();
//因爲有些控件全局應用所以我們聲明全局
        Panel panel1 = new Panel();//生成遊戲區域
        //生成飛機控件
        PictureBox picture = new PictureBox();
        private void Form1_Load(object sender, EventArgs e)
        {
            this.KeyPreview = true;//始終讓窗體獲取焦點
            this.Text = "不會打字的小強";
            //設置遊戲區域
            panel1.Size = new Size(700, 430);//設置遊戲區域大小
            panel1.BorderStyle = BorderStyle.Fixed3D;//設置邊框
            panel1.Location = new Point(10,10);//設置初始位置
            this.Controls.Add(panel1);//窗體中加入遊戲區域
            timer1.Tick += Timer1_Tick1;//timer1點擊事件
            timer1.Interval = 1000;//時間間隔
            timer2.Tick += Timer2_Tick1;
            timer2.Interval = 100;
        }
2.控制生成字母;
//設置隨機數用於字母的一系列隨機
        Random p = new Random();
        private void Timer1_Tick1(object sender, EventArgs e)
        {
            Label zimu = new Label();//實例化label用於存儲字母
            zimu.Text = ((char)p.Next(97, 123)).ToString();//隨機生成小寫字母
            zimu.Font = new Font("宋體", p.Next(25, 35));//字母的字體設置
            zimu.ForeColor = Color.FromArgb(p.Next(255), p.Next(255), p.Next(255));//設置字母的隨機顏色
            zimu.Left = p.Next(panel1.Width - zimu.Width);//設置位置
            zimu.AutoSize = true;//自適應大小
            zimu.Tag = "zimu";//進行標記
            panel1.Controls.Add(zimu);
        }
3.控制生成"飛機"(初學可以寫在窗體加載事件中);
            //設置飛機屬性
            picture.Size = new Size(100, 100);
            picture.BackgroundImage = Image.FromFile("../../image/BP03.png");//引用圖片的位置
            picture.BackgroundImageLayout = ImageLayout.Stretch;//設置圖片佈局爲拉伸
            //設置圖片位置
            picture.Left = panel1.Width / 2 - picture.Width / 2;
            picture.Top = panel1.Height - picture.Height;
            picture.Tag = "feiji";//進行標記
            panel1.Controls.Add(picture);
4.實現字母的下落;
 private void Timer2_Tick1(object sender, EventArgs e)
        {
            foreach (Control item in panel1.Controls)//遍歷尋找裝zimu控件
            {
                if (item.Tag.ToString() == "zimu" || item.Tag.ToString() == "anxia")//tag爲我們想要的zimu
                {
                    item.Top += 8;//控制其下降10個像素
                 }
              }
           }
5.實現鍵盤點擊對應的字母按鍵飛機進行移動;
這裏需要鍵盤點擊事件,我們用代碼一般可以在加載時輸入:

在這裏插入圖片描述

 private void Form1_KeyPress(object sender, KeyPressEventArgs e)
        {
            foreach (Control item in panel1.Controls)//遍歷尋找裝zimu控件
            {
                if (item.Text == e.KeyChar.ToString() && item.Tag.ToString() == "zimu")//按下的鍵盤字母對應zimu
                {
                    picture.Left = item.Left + item.Width / 2 - picture.Width / 2;//設置飛機移動
                 }
               }
           }
6.實現子彈的生成,並確定位置;
 private void Form1_KeyPress(object sender, KeyPressEventArgs e)
        {
            foreach (Control item in panel1.Controls)//遍歷尋找裝zimu控件
            {
                if (item.Text == e.KeyChar.ToString() && item.Tag.ToString() == "zimu")//按下的鍵盤字母對應zimu
                {
                    item.Tag = "anxia";//改變按下的字母的tag
                    picture.Left = item.Left + item.Width / 2 - picture.Width / 2;//設置飛機移動
                    PictureBox zd = new PictureBox();//裝子彈的容器
                    zd.Size = new Size(20,20);//不能調換順序,必須有大小纔可以運用
                    zd.Left = picture.Left + picture.Width / 2 - zd.Width / 2;//設置子彈的位置
                    zd.BackgroundImage = Image.FromFile("../../image/01.jpg");//設置子彈的圖片
                    zd.BackgroundImageLayout = ImageLayout.Stretch;//設置圖片的拉伸
                    zd.Top = picture.Top-50;//設置子彈的高度
                    zd.Tag = "zidan";
                    panel1.Controls.Add(zd);
                    return;//防止相同字母一次發射多個子彈
                }
            }
        }
7.子彈與字母相碰撞釋放字母資源;
 private void Timer2_Tick1(object sender, EventArgs e)
        {
            foreach (Control item in panel1.Controls)//遍歷尋找裝zimu控件
            {
                if (item.Tag.ToString() == "zimu" || item.Tag.ToString() == "anxia")//tag爲我們想要的zimu
                {
                    item.Top += 8;//控制其下降10個像素
                    if (item.Top >= panel1.Height)//爲了避免子彈多發,當第一次字母落下時將其資源釋放掉
                    {
                        item.Dispose();//釋放資源
                     }
                }
                if (item.Tag.ToString() == "zidan")
                {
                    item.Top -= 10;//子彈上升8像素
                    foreach (Control zimu in panel1.Controls)
                    {
                        if (zimu.Tag.ToString() == "anxia")//改變後可以知道是否是按下的那個字母
                        {
                            if (item.Top <= zimu.Top + zimu.Height && item.Left + item.Width / 2 == zimu.Left + zimu.Width / 2)//判斷其高度
                            {
                              item.Dispose();//釋放資源
                              zimu.Dispose();//釋放資源                              
                            }
                        }
                    }
                }
           }
8.爆炸音效的設置;
if (item.Top <= zimu.Top + zimu.Height && item.Left + item.Width / 2 == zimu.Left + zimu.Width / 2)//判斷其高度
                            {
                                //設置爆炸音效
                                string bz = "../../music/1.wav";//音效的路徑
                                SoundPlayer baozha = new SoundPlayer(bz);//控制聲音播放
                                baozha.Play();//播放聲音
                                item.Dispose();
                                zimu.Dispose();
                             }
9.爆炸效果的實現;
 //設置爆炸效果 
 //寫在第8步zimu.Dispose之後
                            {
                                PictureBox bomd = new PictureBox();
                                bomd.Tag = "bomd";
                                bomd.Size = new Size(20, 20);
                                bomd.Image = imageList1.Images[0];//存儲爆炸的圖片
                                bomd.Tag = 0;
                                bomd.Left = zimu.Left + zimu.Width / 2 - bomd.Width / 2;
                                bomd.Top = zimu.Top + zimu.Height / 2 - bomd.Height / 2;
                                panel1.Controls.Add(bomd);
                                Timer bom = new Timer();//計時器用於爆炸圖片
                                bom.Start();
                                bom.Interval = 50;
                                bom.Tick += Bom_Tick;//timer事件
                                bom.Tag = bomd;//將其打包直接丟給下一個引用
                                }
    private void Bom_Tick(object sender, EventArgs e)
        {
            Timer bom = (Timer)sender;//事件的發起者
            PictureBox photo=(PictureBox)bom.Tag;//轉化爲picturebox類型
            photo.Image = imageList1.Images[(int)photo.Tag];//選擇照片
            photo.Tag = (int)photo.Tag + 1;//照片加1
            if ((int)photo.Tag>31)
            {
                bom.Dispose();
                photo.Dispose();
            }
        }

四.效果圖

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章