C#弹球程序报告(共38页)_第1页
C#弹球程序报告(共38页)_第2页
C#弹球程序报告(共38页)_第3页
C#弹球程序报告(共38页)_第4页
C#弹球程序报告(共38页)_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上沈 阳 航 空 航 天 大 学 课程设计 学 号 班 级 _ _ 姓 名 _ _指导教师 _ _2013年9月19日专心-专注-专业沈阳航空航天大学课程设计任务书学院:航空航天工程学部 专业:飞行器制造工程 班级: 学号 题目:弹球游戏一、课程设计时间二、课程设计内容设计一个弹球游戏的小系统,包括一个小球和一个木板。木板在游戏界面的底部,可来回移动用来接住并反弹小球。要求在游戏的过程中小球碰到界面上壁、左壁和右壁时会被弹回,碰到底部木板时小球变颜色,木板接不到小球时游戏结束。游戏过程可随时暂停和启动。用户界面中的应能够自主设置小球速度,记录得分的功能(计分方法由个人设

2、计决定)。(1)创建图形界面,并在其中绘制小球和木板;小球及木板的尺寸自行设置(最好设置成可修改); (2)假设小球在碰撞时无能量损失(速度不变);(3)应能设置小球速度;(4)碰撞次数即为得分;(5)可以选择文件或者数据库存放得分记录;(6)游戏过程可随时暂停和启动。三、课程设计要求程序质量要求:² 贯彻面向对象程序设计思想。² 设计用户图形界面,界面友好,功能明确,操作方便。² 可以加以其它功能或修饰。² 代码简洁清晰,并给出必要的注释,以增强程序的可读性。课程设计说明书:² 课程结束后,上交课程设计说明书和源程序。课程设计说明书的内容参见

3、提供的模板。四、指导教师和学生签字指导教师:_ 学生签名:_五、成绩六、教师评语目录一、需求分析根据任务书给定的“课程设计内容”和“课程设计要求”作如下的需求分析。该系统是一个典型的对键盘操作即时反映的游戏系统,使用键盘操控,对使用者的指令进行即时执行;该游戏系统的使用者被假定为各个年龄段的人群,该游戏系统应具有即时响应、合理、稳定、多样的特点。1. 即时响应性分析游戏系统应该能够对玩家的指令做出即时的响应,从而达到自由操控的目的,增加游戏的可玩性。2. 合理性分析游戏系统为了增加可玩性,就据需要有一个合理的计分系统,弹球游戏的难度在于用挡板挡回下落的小球,故而将小球撞击挡板的次数作为计分的标

4、准。3. 稳定性分析指游戏系统比较完备,只要是用户的操作合理,系统就不会产生任何漏洞。4. 多样性分析游戏系统应该具有比较复杂的内容设计以增加可玩性,包括难度的设计,小球初始运动方向随机,小球的颜色随着撞击挡板而该变等。5. 主要功能分析(1) 调控游戏难度:开始游戏后,玩家能够自由选择难度,然后正式进入游戏。(2) 暂停、重置游戏:开始游戏后,玩家能够自由的暂停、重置当前游戏。(3) 重新选择游戏难度:开始游戏后,玩家能够重新选择难度,重新开始游戏。(4) 小球初始速度随机性:开始游戏后,小球会沿着除水平和与水平夹90°方向外随机运动,以增加游戏的可玩性;(5) 积分系统:每次游戏

5、失败会显示当前分数以及历史最高分数。二、设计分析为了满足本系统要求,一共设计了4个游戏界面,其基本功能简述如下:1. 第一界面:提供开始游戏按键,触发后正式加载游戏,包扩游戏边框、挡板及多个按钮控件。2. 第二界面:此界面为游戏难度选择界面,包括4个难度选择按钮用于更改游戏难度。3. 第三界面:此界面为正式游戏界面,提供游戏的开始按钮、暂停按钮、重新开始游戏按钮及重新选择游戏难度按钮。其中:(1)开始按钮:触发后正式绘制小球并朝着随机方向运动。(2)暂停按钮:触发后消除当前小球位置,锁定挡板移动。(3)重来按钮:触发后游戏重置(历史记录项除外)。(4)重新选择难度按钮:触发后,呼出第二界面,游

6、戏重置。 4. 第四界面:此界面为游戏结束界面,提供重新游戏按钮。三、主要界面截图图1 第一界面截图图2 第二界面截图图3第三界面截图图4 第四界面截图四、技术要点(对本程序贡献较大的知识点:GDI+绘图、随机数参与判定、键盘事件、重要算法的设计与实现)1、小球及边框的绘制 首先设计游戏窗体的长宽数值,然后设计游戏边框,计算边框及小球位置坐标,并用GDI+方法绘制小球及挡板(小球运动时,上一位置小球擦除同样使用GDI+方法)图5 游戏中GDI+绘制部分/绘制直线边框 Graphics h_a = this.CreateGraphics(); Pen p_a = new Pen(Color.Re

7、d, 5); h_a.DrawLine(p_a, 5, 5, 5, 465); h_a.DrawLine(p_a, 5, 5, 415, 5); h_a.DrawLine(p_a, 415, 5, 415, 465); /绘制小球 Graphics h_b = this.CreateGraphics(); Pen p_b = new Pen(Color.Red, 5); h_b.DrawEllipse(p_b, 210, 455, 5,5);/擦除当前小球位置 Graphics h_c = this.CreateGraphics(); Pen p_c = new Pen(Color.Cyan,

8、 5); h_c.DrawEllipse(p_c, v_x, v_y, 5, 5);2、小球运动创建小球运动速度变量、小球运动方向判定变量、小球位置坐标变量、小球随机速度变量、小球运动正负方向判定变量。(1)使小球运动:规定出小球在X、Y方向上的分速度,然后放置在timer下使小球当前坐标增加或减少对应坐标上的速度,使小球位置坐标不断改变,达到使小球运动的目的。(2)使小球初始方向随机:规定总速度,计算出对应在X、Y上的分速度,从而使得小球在090°之间随机出发(不包括0°及90°)。然后生成判定小球运动方向的随机数,据此使小球能够在0180°之间随机触

9、发(不包括0°及180°)。3、小球碰壁回弹创建小球回弹范围变量,使小球进入范围时对应X或Y速度方向反向,达到回弹的目的。计算挡板范围,设定位置变量,从而判定小球在挡板位置内回弹。/判定坐标方向运动 if (v_x>=400&&v_x<=403) if (v_s_zf != 1) q_x = 2; else q_x = 1; if (v_x>=10&&v_x<=13) if (v_s_zf != 1) q_x = 1; else q_x = 2; if (q_x = 1) v_x = v_x + v_s_x; else

10、 v_x = v_x - v_s_x; /判定坐标方向运动 if (v_y >=10&&v_y<=13) q_y = 2; if (v_y >=453&&v_y<=456) if (v_x >= z_x) if (v_x <= z_x + l_a*2+5) q_y = 1; /小球改变颜色装置 Random y_p_s = new Random(); y_p = y_p_s.Next(1,6); else q_y = 2; else q_y = 2; if (q_y = 1) v_y = v_y - v_s_y; else v

11、_y = v_y + v_s_y; 4、键盘操控挡板移动以及挡板锁定通过对键盘操作的响应,达到控制挡板移动的目的。同时,在不许挡板移动的时候,经过判定,锁定挡板移动。protected override bool ProcessDialogKey(Keys keyData) switch (keyData) case Keys.Left: if (button11.Left > 10) if (t_p = 2) z_x+; z_x+; z_x+; z_x+; z_x+; z_x-; z_x-; z_x-; z_x-; z_x-; this.button11.Location = new

12、Point(z_x, 465); break; case Keys.Right: if (button11.Left + button11.Size.Width < 415) if (t_p = 2) z_x-; z_x-; z_x-; z_x-; z_x-; z_x+; z_x+; z_x+; z_x+; z_x+; this.button11.Location = new Point(z_x, 465); break; return true; 5、游戏结束显示分数小球掉出挡板后,游戏结束,呼出第四界面,同时显示分数。/历史最高分判定 if(j>j_l) j_l=j_a/2-1

13、; /计分板显示内容 this.label4.Text = Convert.ToString(j_a / 2 - 1); this.label6.Text = Convert.ToString(j_l);6、其它略五、个人总结在本次c#课程设计中,我感受到了自主编程的快乐。在编程过过程中,我也发现了自己的许多不足,在不断的对程序的增加、修改、删减中,我学到了很多c#的知识,同时我也学到,只要有坚韧不拔的毅力,就一定能够完成自己想做的事。在本次的课程设计中,我主要是负责小球运动的计算,界面的设计,计分系统的构建等方面。六、参考文献1 C#入门基础2 略七、源程序using System;usin

14、g System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace TanQiuYouXi_a public partial class Form1 : Form public Form1() InitializeComponent(); /小球运动的变量 public float v_x = 210; public float

15、 v_y = 455; /小球运动方向判定变量 public int q_x = 1; public int q_y = 1; /挡板长度基准变量 public int l_a=65; /挡板位置基准变量 public int w_a=210; /小球运动位置坐标 public int z_x; /计分量 public int j_a=0; /历史最高分 public int j_l=0; /计分板是否出现判定 public int j_p = 1; /停止挡板判定 public int t_p=1; /颜色判定变量 public int y_p; /画笔argb值 public int c_

16、a=225; public int c_b=0; public int c_c=0; /小球速度随机变量 public float v_s_a; public float v_s_x; public float v_s_y; /小球正负方向判定 public float v_s_zf; private void Form1_Load(object sender, EventArgs e) timer1.Interval = 15; /挡板可移动性? t_p = 2; private void button1_Click(object sender, EventArgs e) this.butt

17、on1.Visible = false; /绘制直线边框 Graphics h_a = this.CreateGraphics(); Pen p_a = new Pen(Color.Red, 5); h_a.DrawLine(p_a, 5, 5, 5, 465); h_a.DrawLine(p_a, 5, 5, 415, 5); h_a.DrawLine(p_a, 415, 5, 415, 465); /绘制小球 Graphics h_b = this.CreateGraphics(); Pen p_b = new Pen(Color.Red, 5); h_b.DrawEllipse(p_b,

18、 210, 455, 5,5); /难度选择按键可触发性 this.label1.Visible = true; this.button6.Visible = true; this.button7.Visible = true; this.button8.Visible = true; this.button9.Visible = true; this.button10.Visible = true; this.button10.Enabled = false; /开始暂停ª停止三个键可见性及可触发性 this.button2.Visible = true; this.button3

19、.Visible = true; this.button4.Visible = true; this.button2.Enabled = false; this.button3.Enabled = false; this.button4.Enabled = false; this.button5.Visible = false; /挡板可见性? this.button11.Visible = true; this.button11.Enabled = false; /挡板位移表达式º? z_x = w_a - l_a; /挡板可移动性? t_p = 2; /开始键1 小球开始运动 p

20、rivate void button2_Click(object sender, EventArgs e) timer1.Start(); this.button2.Enabled = false; this.button3.Enabled = true; this.button4.Enabled = true; /重置挡板位置? z_x = w_a - l_a; this.button11.Location = new Point(z_x, 465); /挡板可移动性? t_p = 1; /重置小球速度 Random v_s = new Random(); v_s_a = v_s.Next(

21、0, 300); v_s_x = (float)(v_s_a * 0.01); v_s_y = (float)Math.Sqrt(3 * 3 - v_s_x * v_s_x); Random v_s_zf_r = new Random(); v_s_zf = v_s_zf_r.Next(1,3); if (v_s_zf = 1) v_s_x = -v_s_x; while (v_s_x = 0 | v_s_y = 0) v_s_a = v_s.Next(0, 300); v_s_x = (float)(v_s_a * 0.01); v_s_y = (float)Math.Sqrt(3 * 3

22、- v_s_x * v_s_x); protected override bool ProcessDialogKey(Keys keyData) switch (keyData) case Keys.Left: if (button11.Left > 10) if (t_p = 2) z_x+; z_x+; z_x+; z_x+; z_x+; z_x-; z_x-; z_x-; z_x-; z_x-; this.button11.Location = new Point(z_x, 465); break; case Keys.Right: if (button11.Left + butt

23、on11.Size.Width < 415) if (t_p = 2) z_x-; z_x-; z_x-; z_x-; z_x-; z_x+; z_x+; z_x+; z_x+; z_x+; this.button11.Location = new Point(z_x, 465); break; return true; private void timer1_Tick(object sender, EventArgs e) /擦除当前小球位置? Graphics h_c = this.CreateGraphics(); Pen p_c = new Pen(Color.Cyan, 5);

24、 h_c.DrawEllipse(p_c, v_x, v_y, 5, 5); /画笔颜色设置 Color c = Color.FromArgb(c_a, c_b, c_c); Pen p_b = new Pen(c, 5); /判定X坐标方向运动 if (v_x>=400&&v_x<=403) if (v_s_zf != 1) q_x = 2; else q_x = 1; if (v_x>=10&&v_x<=13) if (v_s_zf != 1) q_x = 1; else q_x = 2; if (q_x = 1) v_x = v_x

25、 + v_s_x; else v_x = v_x - v_s_x; /判定Y坐标方向运动 if (v_y >=10&&v_y<=13) q_y = 2; if (v_y >=453&&v_y<=456) if (v_x >= z_x) if (v_x <= z_x + l_a*2+5) q_y = 1; /小球改变颜色装置? Random y_p_s = new Random(); y_p = y_p_s.Next(1,6); else q_y = 2; else q_y = 2; if (q_y = 1) v_y = v_y

26、 - v_s_y; else v_y = v_y + v_s_y; /判定argb值 switch (y_p) case 1: c_a = 255; c_b = 0; c_c = 0; break; case 2: c_a = 255; c_b = 0; c_c = 255; break; case 3: c_a = 0; c_b = 0; c_c = 0; break; case 4: c_a = 0; c_b = 255; c_c = 0; break; case 5: c_a = 0; c_b = 0; c_c = 255; break; case 6: c_a = 255; c_b =

27、 255; c_c = 0; break; /绘制小球 Graphics h_b = this.CreateGraphics(); h_b.DrawEllipse(p_b, v_x, v_y, 5, 5); /计分装置 if (v_y >= 449 && v_y <= 452) j_a+; /游戏失败装置 if (v_y >=465) if (j_p = 1) /显示计分板 this.label2.Visible = true; this.label3.Visible = true; this.label4.Visible = true; this.label

28、5.Visible = true; this.button12.Visible = true; /其他按钮显示 this.button2.Enabled = false; this.button3.Enabled = false; this.button4.Enabled = false; this.button10.Enabled = false; int j=j_a/2-1; /历史最高分判定 if(j>j_l) j_l=j_a/2-1; /计分板显示内容 this.label4.Text = Convert.ToString(j_a / 2 - 1); this.label6.Te

29、xt = Convert.ToString(j_l); /绘制直线边框¨° Graphics h_a = this.CreateGraphics(); Pen p_a = new Pen(Color.Red, 5); h_a.DrawLine(p_a, 5, 5, 5, 465); h_a.DrawLine(p_a, 5, 5, 415, 5); h_a.DrawLine(p_a, 415, 5, 415, 465); private void button3_Click(object sender, EventArgs e) timer1.Stop(); /擦除当前小球位

30、置 Graphics h_c = this.CreateGraphics(); Pen p_c = new Pen(Color.Cyan, 5); h_c.DrawEllipse(p_c, v_x, v_y, 5, 5); /挡板可移动性? t_p = 2; this.button3.Enabled = false; this.button2.Visible = false; this.button5.Visible = true; private void button4_Click(object sender, EventArgs e) timer1.Stop(); v_x = 210;

31、v_y = 455; q_x = 1; q_y = 1; w_a = 210; /清除所有图案 this.Refresh(); /绘制直线边框 Graphics h_a = this.CreateGraphics(); Pen p_a = new Pen(Color.Red, 5); h_a.DrawLine(p_a, 5, 5, 5, 465); h_a.DrawLine(p_a, 5, 5, 415, 5); h_a.DrawLine(p_a, 415, 5, 415, 465); /绘制小球 Graphics h_b = this.CreateGraphics(); Pen p_b = new Pen(Color.Red, 5); h_b.DrawEllipse(p_b, 210, 455, 5, 5); /重置挡板 this.button11.Location = new Point(w_a-l_a, 465); button11.Size = new Size(l_a*2+5, 10); /开始 暂停 重来按钮可见性及可触发性? this.button2.Visible =

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论