C#彈球程序報告_第1頁
C#彈球程序報告_第2頁
C#彈球程序報告_第3頁
C#彈球程序報告_第4頁
C#彈球程序報告_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

沈陽航空航天大學課程設計學號班級__姓名_______指導教師_______2023年9月19日沈陽航空航天大學課程設計任務書學院:航空航天工程學部專業(yè):飛行器制造工程班級:學號題目:彈球游戲一、課程設計時間二、課程設計內容設計一個彈球游戲的小系統(tǒng),包括一個小球和一個木板。木板在游戲界面的底部,可來回移動用來接住并反彈小球。要求在游戲的過程中小球碰到界面上壁、左壁和右壁時會被彈回,碰到底部木板時小球變顏色,木板接不到小球時游戲結束。游戲過程可隨時暫停和啟動。用戶界面中的應能夠自主設置小球速度,記錄得分的功能〔計分方法由個人設計決定〕?!?〕創(chuàng)立圖形界面,并在其中繪制小球和木板;小球及木板的尺寸自行設置〔最好設置成可修改〕;〔2〕假設小球在碰撞時無能量損失〔速度不變〕;〔3〕應能設置小球速度;〔4〕碰撞次數(shù)即為得分;〔5〕可以選擇文件或者數(shù)據(jù)庫存放得分記錄;〔6〕游戲過程可隨時暫停和啟動。三、課程設計要求程序質量要求:貫徹面向對象程序設計思想。設計用戶圖形界面,界面友好,功能明確,操作方便。可以加以其它功能或修飾。代碼簡潔清晰,并給出必要的注釋,以增強程序的可讀性。。課程設計說明書:課程結束后,上交課程設計說明書和源程序。課程設計說明書的內容參見提供的模板。四、指導教師和學生簽字指導教師:________學生簽名:________五、成績六、教師評語目錄TOC\o"1-3"\h\z一、需求分析1二、設計分析3三、主要界面截圖5四、技術要點6五、個人總結7六、參考文獻7七、源程序7一、需求分析根據(jù)任務書給定的“課程設計內容〞和“課程設計要求〞作如下的需求分析。該系統(tǒng)是一個典型的對鍵盤操作即時反映的游戲系統(tǒng),使用鍵盤操控,對使用者的指令進行即時執(zhí)行;該游戲系統(tǒng)的使用者被假定為各個年齡段的人群,該游戲系統(tǒng)應具有即時響應、合理、穩(wěn)定、多樣的特點。即時響應性分析游戲系統(tǒng)應該能夠對玩家的指令做出即時的響應,從而到達自由操控的目的,增加游戲的可玩性。合理性分析游戲系統(tǒng)為了增加可玩性,就據(jù)需要有一個合理的計分系統(tǒng),彈球游戲的難度在于用擋板擋回下落的小球,故而將小球撞擊擋板的次數(shù)作為計分的標準。穩(wěn)定性分析指游戲系統(tǒng)比擬完備,只要是用戶的操作合理,系統(tǒng)就不會產(chǎn)生任何漏洞。多樣性分析游戲系統(tǒng)應該具有比擬復雜的內容設計以增加可玩性,包括難度的設計,小球初始運動方向隨機,小球的顏色隨著撞擊擋板而該變等。主要功能分析調控游戲難度:開始游戲后,玩家能夠自由選擇難度,然后正式進入游戲。暫停、重置游戲:開始游戲后,玩家能夠自由的暫停、重置當前游戲。重新選擇游戲難度:開始游戲后,玩家能夠重新選擇難度,重新開始游戲。小球初始速度隨機性:開始游戲后,小球會沿著除水平和與水平夾90°方向外隨機運動,以增加游戲的可玩性;積分系統(tǒng):每次游戲失敗會顯示當前分數(shù)以及歷史最高分數(shù)。二、設計分析為了滿足本系統(tǒng)要求,一共設計了4個游戲界面,其根本功能簡述如下:第一界面:提供開始游戲按鍵,觸發(fā)后正式加載游戲,包擴游戲邊框、擋板及多個按鈕控件。第二界面:此界面為游戲難度選擇界面,包括4個難度選擇按鈕用于更改游戲難度。第三界面:此界面為正式游戲界面,提供游戲的開始按鈕、暫停按鈕、重新開始游戲按鈕及重新選擇游戲難度按鈕。其中:〔1〕開始按鈕:觸發(fā)后正式繪制小球并朝著隨機方向運動?!?〕暫停按鈕:觸發(fā)后消除當前小球位置,鎖定擋板移動。〔3〕重來按鈕:觸發(fā)后游戲重置〔歷史記錄項除外〕?!?〕重新選擇難度按鈕:觸發(fā)后,呼出第二界面,游戲重置。4.第四界面:此界面為游戲結束界面,提供重新游戲按鈕。三、主要界面截圖圖1第一界面截圖圖2第二界面截圖圖3第三界面截圖圖4第四界面截圖四、技術要點〔對本程序奉獻較大的知識點:GDI+繪圖、隨機數(shù)參與判定、鍵盤事件、重要算法的設計與實現(xiàn)〕1、小球及邊框的繪制首先設計游戲窗體的長寬數(shù)值,然后設計游戲邊框,計算邊框及小球位置坐標,并用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、小球運動創(chuàng)立小球運動速度變量、小球運動方向判定變量、小球位置坐標變量、小球隨機速度變量、小球運動正負方向判定變量。〔1〕使小球運動:規(guī)定出小球在X、Y方向上的分速度,然后放置在timer下使小球當前坐標增加或減少對應坐標上的速度,使小球位置坐標不斷改變,到達使小球運動的目的?!?〕使小球初始方向隨機:規(guī)定總速度,計算出對應在X、Y上的分速度,從而使得小球在0~90°之間隨機出發(fā)〔不包括0°及90°〕。然后生成判定小球運動方向的隨機數(shù),據(jù)此使小球能夠在0~180°之間隨機觸發(fā)〔不包括0°及180°〕。3、小球碰壁回彈創(chuàng)立小球回彈范圍變量,使小球進入范圍時對應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、鍵盤操控擋板移動以及擋板鎖定通過對鍵盤操作的響應,到達控制擋板移動的目的。同時,在不許擋板移動的時候,經(jīng)過判定,鎖定擋板移動。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、游戲結束顯示分數(shù)小球掉出擋板后,游戲結束,呼出第四界面,同時顯示分數(shù)。//歷史最高分判定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#課程設計中,我感受到了自主編程的快樂。在編程過過程中,我也發(fā)現(xiàn)了自己的許多缺乏,在不斷的對程序的增加、修改、刪減中,我學到了很多c#的知識,同時我也學到,只要有堅韌不拔的毅力,就一定能夠完成自己想做的事。在本次的課程設計中,我主要是負責小球運動的計算,界面的設計,計分系統(tǒng)的構建等方面。六、參考文獻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;//計分板是否出現(xiàn)判定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);//難度選擇按鍵可觸發(fā)性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;//開始暫停a停止三個鍵可見性及可觸發(fā)性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;//擋板位移表達式o?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);//開始暫停重來按鈕可見性及可觸發(fā)性?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);//重置計分板分數(shù)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;//難度選擇按鍵可見性及可觸發(fā)性this.label1.Visible=false;this.button6.Visible=false;this.button7.Visible=false;this.button8.Visible=false;this.button9.Visible=false;this.button10.Enabled=true;//開始暫停停止三個按鈕觸發(fā)性this.button2.Enabled=true;this.button3.Enabled=false;this.button4.Enabled=false;//重啟記分板j_p=1;//重置計分板分數(shù)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;//難度選擇按鍵可觸發(fā)性this.label1.Visible=false;this.button6.Visible=false;this.button7.Visible=false;this.button8.Visible=false;this.button9.Visible=false;this.button10.Enabled=true;//開始暫停停止三個鍵可觸發(fā)性this.button2.Enabled=true;this.button3.Enabled=false;this.button4.Enabled=false;//重啟計分板j_p=1;//重置計分板分數(shù)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;//難度選擇按鍵可觸發(fā)性this.label1.Visible=false;this.button6.Visible=false;this.button7.Visible=false;this.button8.Visible=false;this.button9.Visible=false;this.button10.Enabled=true;//開始暫停停止三個鍵可觸發(fā)性this.button2.Enabled=true;this.button3.Enabled=false;this.button4.Enabled=false;//重啟計分板j_p=1;//重置計分板分數(shù)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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論