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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

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

評論

0/150

提交評論