一.编程思路
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(); } } 四.效果图

技术
©2019-2020 Toolsou All rights reserved,
org.postgresql.util.PSQLException 处理记录数字滚动抽奖小程序(精华2020年6月2日更新) TypeScript函数详解Vue页面跳转传递参数及接收MySql语句 递归寻找某输入部门的所有下级部门Map 判断key对应的value值是否存在-containsKey()el-select获取选中项label值指定位置输出字符串--PTA(精华)2020年6月29日 C#类库 接口签名校验2年前出厂的小天才电话手表无法使用 联通:2G网已关闭