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

下载本文档

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

文档简介

沈阳航空航天大学课程设计学号班级__姓名_______指导教师_______2023年9月19日沈阳航空航天大学课程设计任务书学院:航空航天工程学部专业:飞行器制造工程班级:学号题目:弹球游戏一、课程设计时间二、课程设计内容设计一个弹球游戏的小系统,包括一个小球和一个木板。木板在游戏界面的底部,可来回移动用来接住并反弹小球。要求在游戏的过程中小球碰到界面上壁、左壁和右壁时会被弹回,碰到底部木板时小球变颜色,木板接不到小球时游戏结束。游戏过程可随时暂停和启动。用户界面中的应能够自主设置小球速度,记录得分的功能〔计分方法由个人设计决定〕。〔1〕创立图形界面,并在其中绘制小球和木板;小球及木板的尺寸自行设置〔最好设置成可修改〕;〔2〕假设小球在碰撞时无能量损失〔速度不变〕;〔3〕应能设置小球速度;〔4〕碰撞次数即为得分;〔5〕可以选择文件或者数据库存放得分记录;〔6〕游戏过程可随时暂停和启动。三、课程设计要求程序质量要求:贯彻面向对象程序设计思想。设计用户图形界面,界面友好,功能明确,操作方便。可以加以其它功能或修饰。代码简洁清晰,并给出必要的注释,以增强程序的可读性。。课程设计说明书:课程结束后,上交课程设计说明书和源程序。课程设计说明书的内容参见提供的模板。四、指导教师和学生签字指导教师:________学生签名:________五、成绩六、教师评语目录TOC\o"1-3"\h\z一、需求分析1二、设计分析3三、主要界面截图5四、技术要点6五、个人总结7六、参考文献7七、源程序7一、需求分析根据任务书给定的“课程设计内容〞和“课程设计要求〞作如下的需求分析。该系统是一个典型的对键盘操作即时反映的游戏系统,使用键盘操控,对使用者的指令进行即时执行;该游戏系统的使用者被假定为各个年龄段的人群,该游戏系统应具有即时响应、合理、稳定、多样的特点。即时响应性分析游戏系统应该能够对玩家的指令做出即时的响应,从而到达自由操控的目的,增加游戏的可玩性。合理性分析游戏系统为了增加可玩性,就据需要有一个合理的计分系统,弹球游戏的难度在于用挡板挡回下落的小球,故而将小球撞击挡板的次数作为计分的标准。稳定性分析指游戏系统比拟完备,只要是用户的操作合理,系统就不会产生任何漏洞。多样性分析游戏系统应该具有比拟复杂的内容设计以增加可玩性,包括难度的设计,小球初始运动方向随机,小球的颜色随着撞击挡板而该变等。主要功能分析调控游戏难度:开始游戏后,玩家能够自由选择难度,然后正式进入游戏。暂停、重置游戏:开始游戏后,玩家能够自由的暂停、重置当前游戏。重新选择游戏难度:开始游戏后,玩家能够重新选择难度,重新开始游戏。小球初始速度随机性:开始游戏后,小球会沿着除水平和与水平夹90°方向外随机运动,以增加游戏的可玩性;积分系统:每次游戏失败会显示当前分数以及历史最高分数。二、设计分析为了满足本系统要求,一共设计了4个游戏界面,其根本功能简述如下:第一界面:提供开始游戏按键,触发后正式加载游戏,包扩游戏边框、挡板及多个按钮控件。第二界面:此界面为游戏难度选择界面,包括4个难度选择按钮用于更改游戏难度。第三界面:此界面为正式游戏界面,提供游戏的开始按钮、暂停按钮、重新开始游戏按钮及重新选择游戏难度按钮。其中:〔1〕开始按钮:触发后正式绘制小球并朝着随机方向运动。〔2〕暂停按钮:触发后消除当前小球位置,锁定挡板移动。〔3〕重来按钮:触发后游戏重置〔历史记录项除外〕。〔4〕重新选择难度按钮:触发后,呼出第二界面,游戏重置。4.第四界面:此界面为游戏结束界面,提供重新游戏按钮。三、主要界面截图图1第一界面截图图2第二界面截图图3第三界面截图图4第四界面截图四、技术要点〔对本程序奉献较大的知识点:GDI+绘图、随机数参与判定、键盘事件、重要算法的设计与实现〕1、小球及边框的绘制首先设计游戏窗体的长宽数值,然后设计游戏边框,计算边框及小球位置坐标,并用GDI+方法绘制小球及挡板〔小球运动时,上一位置小球擦除同样使用GDI+方法〕图5游戏中GDI+绘制局部//绘制直线边框Graphicsh_a=this.CreateGraphics();Penp_a=newPen(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);//绘制小球Graphicsh_b=this.CreateGraphics();Penp_b=newPen(Color.Red,5);h_b.DrawEllipse(p_b,210,455,5,5);//擦除当前小球位置Graphicsh_c=this.CreateGraphics();Penp_c=newPen(Color.Cyan,5);h_c.DrawEllipse(p_c,v_x,v_y,5,5);2、小球运动创立小球运动速度变量、小球运动方向判定变量、小球位置坐标变量、小球随机速度变量、小球运动正负方向判定变量。〔1〕使小球运动:规定出小球在X、Y方向上的分速度,然后放置在timer下使小球当前坐标增加或减少对应坐标上的速度,使小球位置坐标不断改变,到达使小球运动的目的。〔2〕使小球初始方向随机:规定总速度,计算出对应在X、Y上的分速度,从而使得小球在0~90°之间随机出发〔不包括0°及90°〕。然后生成判定小球运动方向的随机数,据此使小球能够在0~180°之间随机触发〔不包括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{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;//小球改变颜色装置Randomy_p_s=newRandom();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_y=v_y+v_s_y;}4、键盘操控挡板移动以及挡板锁定通过对键盘操作的响应,到达控制挡板移动的目的。同时,在不许挡板移动的时候,经过判定,锁定挡板移动。protectedoverrideboolProcessDialogKey(KeyskeyData){switch(keyData){caseKeys.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=newPoint(z_x,465);}break;caseKeys.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=newPoint(z_x,465);}break;}returntrue;}5、游戏结束显示分数小球掉出挡板后,游戏结束,呼出第四界面,同时显示分数。//历史最高分判定if(j>j_l){j_l=j_a/2-1;}//计分板显示内容this.label4.Text=Convert.ToString(j_a/2-1);this.label6.Text=Convert.ToString(j_l);6、其它……略……五、个人总结在本次c#课程设计中,我感受到了自主编程的快乐。在编程过过程中,我也发现了自己的许多缺乏,在不断的对程序的增加、修改、删减中,我学到了很多c#的知识,同时我也学到,只要有坚韧不拔的毅力,就一定能够完成自己想做的事。在本次的课程设计中,我主要是负责小球运动的计算,界面的设计,计分系统的构建等方面。六、参考文献1C#入门根底2……略……七、源程序usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;namespaceTanQiuYouXi_a{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}//小球运动的变量publicfloatv_x=210;publicfloatv_y=455;//小球运动方向判定变量publicintq_x=1;publicintq_y=1;//挡板长度基准变量publicintl_a=65;//挡板位置基准变量publicintw_a=210;//小球运动位置坐标publicintz_x;//计分量publicintj_a=0;//历史最高分publicintj_l=0;//计分板是否出现判定publicintj_p=1;//停止挡板判定publicintt_p=1;//颜色判定变量publicinty_p;//画笔argb值publicintc_a=225;publicintc_b=0;publicintc_c=0;//小球速度随机变量publicfloatv_s_a;publicfloatv_s_x;publicfloatv_s_y;//小球正负方向判定publicfloatv_s_zf;privatevoidForm1_Load(objectsender,EventArgse){timer1.Interval=15;//挡板可移动性?t_p=2;}privatevoidbutton1_Click(objectsender,EventArgse){this.button1.Visible=false;//绘制直线边框Graphicsh_a=this.CreateGraphics();Penp_a=newPen(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);//绘制小球Graphicsh_b=this.CreateGraphics();Penp_b=newPen(Color.Red,5);h_b.DrawEllipse(p_b,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.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小球开始运动privatevoidbutton2_Click(objectsender,EventArgse){timer1.Start();this.button2.Enabled=false;this.button3.Enabled=true;this.button4.Enabled=true;//重置挡板位置?z_x=w_a-l_a;this.button11.Location=newPoint(z_x,465);//挡板可移动性?t_p=1;//重置小球速度Randomv_s=newRandom();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-v_s_x*v_s_x);Randomv_s_zf_r=newRandom();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-v_s_x*v_s_x);}}protectedoverrideboolProcessDialogKey(KeyskeyData){switch(keyData){caseKeys.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=newPoint(z_x,465);}break;caseKeys.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=newPoint(z_x,465);}break;}returntrue;}privatevoidtimer1_Tick(objectsender,EventArgse){//擦除当前小球位置?Graphicsh_c=this.CreateGraphics();Penp_c=newPen(Color.Cyan,5);h_c.DrawEllipse(p_c,v_x,v_y,5,5);//画笔颜色设置Colorc=Color.FromArgb(c_a,c_b,c_c);Penp_b=newPen(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+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;//小球改变颜色装置?Randomy_p_s=newRandom();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_y=v_y+v_s_y;}//判定argb值switch(y_p){case1:c_a=255;c_b=0;c_c=0;break;case2:c_a=255;c_b=0;c_c=255;break;case3:c_a=0;c_b=0;c_c=0;break;case4:c_a=0;c_b=255;c_c=0;break;case5:c_a=0;c_b=0;c_c=255;break;case6:c_a=255;c_b=255;c_c=0;break;}//绘制小球Graphicsh_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.label5.Visible=true;this.button12.Visible=true;//其他按钮显示this.button2.Enabled=false;this.button3.Enabled=false;this.button4.Enabled=false;this.button10.Enabled=false;intj=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.Text=Convert.ToString(j_l);//绘制直线边框¨°Graphicsh_a=this.CreateGraphics();Penp_a=newPen(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);}}}privatevoidbutton3_Click(objectsender,EventArgse){timer1.Stop();//擦除当前小球位置Graphicsh_c=this.CreateGraphics();Penp_c=newPen(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;}privatevoidbutton4_Click(objectsender,EventArgse){timer1.Stop();v_x=210;v_y=455;q_x=1;q_y=1;w_a=210;//去除所有图案this.Refresh();//绘制直线边框Graphicsh_a=this.CreateGraphics();Penp_a=newPen(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);//绘制小球Graphicsh_b=this.CreateGraphics();Penp_b=newPen(Color.Red,5);h_b.DrawEllipse(p_b,210,455,5,5);//重置挡板this.button11.Location=newPoint(w_a-l_a,465);button11.Size=newSize(l_a*2+5,10);//开始暂停重来按钮可见性及可触发性?this.button2.Visible=true;this.button2.Enabled=true;this.button3.Enabled=false;this.button4.Enabled=false;this.button5.Visible=false;//重置挡板位置z_x=w_a-l_a;this.button11.Location=newPoint(z_x,465);//重置计分板分数j_a=0;//挡板可移动性t_p=2;}privatevoidbutton5_Click(objectsender,EventArgse){timer1.Start();t_p=1;this.button2.Visible=true;this.button3.Enabled=true;this.button5.Visible=false;}privatevoidbutton6_Click(objectsender,EventArgse){timer1.Stop();v_x=210;v_y=455;q_x=1;q_y=1;w_a=210;z_x=145;//去除所有图案this.Refresh();//绘制直线边框Graphicsh_a=this.CreateGraphics();Penp_a=newPen(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);//绘制小球Graphicsh_b=this.CreateGraphics();Penp_b=newPen(Color.Red,5);h_b.DrawEllipse(p_b,210,455,5,5);//重置挡板this.button11.Location=newPoint(145,465);button11.Size=newSize(135,10);l_a=65;//难度选择按键可见性及可触发性this.label1.Visible=false;this.button6.Visible=false;this.button7.Visible=false;this.button8.Visible=false;this.button9.Visible=false;this.button10.Enabled=true;//开始暂停停止三个按钮触发性this.button2.Enabled=true;this.button3.Enabled=false;this.button4.Enabled=false;//重启记分板j_p=1;//重置计分板分数j_a=0;}privatevoidbutton7_Click(objectsender,EventArgse){timer1.Stop();v_x=210;v_y=455;q_x=1;q_y=1;w_a=210;z_x=165;//去除所有图案this.Refresh();//绘制直线边框Graphicsh_a=this.CreateGraphics();Penp_a=newPen(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);//绘制小球Graphicsh_b=this.CreateGraphics();Penp_b=newPen(Color.Red,5);h_b.DrawEllipse(p_b,210,455,5,5);//重置挡板this.button11.Location=newPoint(165,465);button11.Size=newSize(95,10);l_a=45;//难度选择按键可触发性this.label1.Visible=false;this.button6.Visible=false;this.button7.Visible=false;this.button8.Visible=false;this.button9.Visible=false;this.button10.Enabled=true;//开始暂停停止三个键可触发性this.button2.Enabled=true;this.button3.Enabled=false;this.button4.Enabled=false;//重启计分板j_p=1;//重置计分板分数j_a=0;}privatevoidbutton8_Click(objectsender,EventArgse){timer1.Stop();v_x=210;v_y=455;q_x=1;q_y=1;w_a=210;z_x=185;//去除所有图案this.Refresh();//绘制直线边框Graphicsh_a=this.CreateGraphics();Penp_a=newPen(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);//绘制小球Graphicsh_b=this.CreateGraphics();Penp_b=newPen(Color.Red,5);h_b.DrawEllipse(p_b,210,455,5,5);//重置挡板this.button11.Location=newPoint(185,465);button11.Size=newSize(55,10);l_a=25;//难度选择按键可触发性this.label1.Visible=false;this.button6.Visible=false;this.button7.Visible=false;this.button8.Visible=false;this.button9.Visible=false;this.button10.Enabled=true;//开始暂停停止三个键可触发性this.button2.Enabled=true;this.button3.Enabled=false;this.button4.Enabled=false;//重启计分板j_p=1;//重置计分板分数j_a=0;}privatevoidbutton9_Click(objectsender,EventArgse){timer1.Stop();v_x=210;v_y=455;q_x=1;q_y=1;w_a=210;z_x=200;//去除所有图案this.Refresh();//绘制直线边框Graphicsh_a=this.CreateGraphics();Penp_a=newPen(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);//绘制小球Graphicsh_b=this.CreateGraphics();Penp_b=newPen(Color.Red,5);h_b.DrawEllipse(p_b,210,455,5,5);//重置挡板this.button11.Location=newPoint(200,465);button11.Size=newSize(25,10);l_a=10;//难度选择按钮可见性this.label1.Visible=false;this.button6.Visible=false;this.button7.Visible=false;this.button8.Visible=false;this.button9.Visibl

温馨提示

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

评论

0/150

提交评论