C語言課程設計報告模板_第1頁
C語言課程設計報告模板_第2頁
C語言課程設計報告模板_第3頁
C語言課程設計報告模板_第4頁
C語言課程設計報告模板_第5頁
已閱讀5頁,還剩21頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

年4月19日C語言課程設計報告模板文檔僅供參考,不當之處,請聯系改正。石家莊鐵道學院課程設計石家莊鐵道學院課程設計黑白棋游戲設計黑白棋游戲設計單位計算機與信息工程分院分院(系)專業電氣信息類(計)學號學生姓名指導教師劉輝完成日期年7月1日

摘要進行科研信息管理是高校重要工作之一。傳統的科研信息管理由于是手工操作,工作量大且容易出錯。隨著計算機和網絡技術的迅速發展,越來越多的科研單位和院校都擁有自己的科研管理系統,而采用B/S架構的科研管理系統進行科研信息管理則是其趨勢。J2EE技術的基礎就是核心Java平臺,它有許多優點,例如:“編寫一次、隨處運行”的特性、方便存取數據庫的JDBCAPI,CORBA技術以及能夠在Internet應用中保護數據的安全模式等等。J2EE體系結構提供中間層集成框架用來滿足高可用性、高可靠性以及可擴展性的應用需求,為搭建具有可伸縮性、靈活性、易維護性的網絡應用系統提供了良好的機制。本文基于J2EE平臺技術、采用Browser/Server結構,設計并實現了該系統中的項目管理子系統。論文首先介紹了系統開發涉及的相關技術,主要圍繞J2EE的相關技術和系統的體系結構。其次,介紹了高校科研管理系統的總體分析與設計,包括需求分析、功能模塊分析和數據庫設計。最后,利用JSP+JavaBean模式對項目管理子系統進行了實現,并作了詳細描述,主要采用圖片與代碼結合的方式詳細地敘述了系統功能的實現。關鍵詞:黑白棋,C語言,數組,分支,循環,圖形處理,函數

目錄1.選題的意義 70068\h12.系統功能需求分析 70087\h12.1 70088\h12.2 270092\h13.3 70093\h213.系統設計 70097\h263.1 70098\h263.2 70099\h284.系統實現 70103\h404.1 70104\h404.2 70105\h404.總結 70103\h405.1總結 70104\h405.2存在的主要問題 70105\h40參考文獻 70106\h41

第1章選題的意義自我介紹:計0805-2班2455李國強電氣信息類(計)題目名稱:黑白棋游戲設計選題的目的:經過該題目的設計,使自己掌握軟件開發過程的問題分析、系統設計、程序編碼、測試等基本方法和技能。分支、循環、數組、函數等的綜合運用;圖形處理函數的使用。時間安排:6月24號~7月1號主要參考文獻:1.《C語言程序設計實例精粹》.譚明金.電子工業出版社2.《C語言編程技巧及實用程序薈萃》.魯沐浴.電子工業出版社3.《C語言課程設計案例精選與編程指導》陳清華.東南大學出版社4.《C語言課程設計案例精編》.郭翠英.中國水利水電出版社5.《C語言實戰105例》.王為青.人民郵電出版社第2章系統功能需求分析2、1可行性分析科技的飛速發展,將人類帶入了信息時代,計算機越來越貼近人的生活,速度成為人們成功的前提條件,以致于人們必須不斷嘗試著使用各種手段來提高自身的工作效率,其手段之一就是對鍵盤的充分利用和相應游戲軟件的開發.智能型的游戲越來越深受廣大游戲愛好者的喜歡.方便而快捷.黑白棋的游戲是要在一個8*8的網格中進行,而數組屬于構造體類型,數組是具有相同數據類型的變量序列,序列中的每個變量成為元素,數組元素由一個統一標識的數組名和順序好“下標”來表示。顧需要在游戲中定義一個二維數從而實現游戲的走棋、落棋、判斷棋盤的變化等。游戲不同于基于C語言的其它程序(如學生成績管理系統、教務工作管理系統、圖書管理系統等)由于游戲本身的問地就在于緩解壓力,因此基于C語言設計的游戲需要一個良好的游戲界面,給游戲者以輕松和愉快的感覺。TURBOC提供了70多個圖形函數,這些函數包括在圖形庫文件graphics.LIB中,她們被定義在graphics.h中。有如此強大的圖形處理能力,去設計一個良好的人機交流界面是可行的。由于此游戲采用的是“人人對戰”的模式,因此在游戲時,需要倆個游戲者輪流下棋,棋手1走棋完畢后,經過判斷棋盤變化過程后棋手2走棋,游戲過程需要在倆棋手間不斷進行轉化。在C語言中,提供了包括if……else,switch……case等分支語句,綜合運用這些分支語句,能夠完成上述轉化。黑白棋游戲雙方共需要走棋60手,每次走棋后,都需要根據相同的標準判斷棋盤變化,來判斷旗子顏色的變化情況。顯然需要運用循環語句來簡化編程的長度。C語言中提供了while\for等循環語句能夠實現上述功能。游戲需要操作和輸出顯示游戲的結果,游戲的操作要由計算機的外部設備在人的操作下完成。C語言本身并不提供輸入和輸出語句,輸入和輸出的操作都是由函數來完成的,在C語言的標準庫函數中提供了一些輸入和輸出的函數,這些函數的指針都是針對系統隱含指定的輸入和輸出設備的。綜合運用這些輸入和輸出的函數能夠實現上述的功能。經濟可行性分析:本游戲的實現,花費了很多時間,但沒有花費什么費用,而已這樣簡單但有一定難度的游戲更能激發游戲愛好者的興趣,因此黑白棋游戲能夠滿足游戲市場的尋求.綜合上述,基于C語言的游戲黑白棋的設計是可行的。2-2游戲黑白棋的總體設想在主函數中,經過調用繪制棋盤、棋手對戰,判斷棋盤變化、改變棋子顏色等函數的調用來實現主函數的相應的功能,以下是有關于主函數的流程圖。繪制棋盤和初始棋子DrawQp棋手對戰playtoplay判斷棋盤變化(能否分出勝負)QpChange計算棋手的成績輸出勝利者信息Y1.DrawQp繪制棋盤和初始棋子在界面上繪制320*320的棋盤,并在棋盤中繪制8*8的格子,初始棋子2.SetPlay設置棋子第一次的顏色先走棋者持白子,后走棋黑子,每次交替3.Playtoplay人人對戰函數倆棋手交替走棋,定義鍵盤操作等4.MoveColor恢復原來棋盤狀態棋子由初始位置到落子位置的路徑不改變顏色5.QpChange判斷棋盤的變化改變棋子的顏色走棋后判斷棋盤的變化情況,根據變化情況判斷是否能夠輸出分數6.DoScore處理分數根據棋盤上旗子的多少進行分數的處理第三章、系統設計3.1系統界面設計(把設計界面復制到這里)3.2系統編程設計本程序設計為人與人對弈,一方執黑棋,一方執白棋,輪流走。棋盤為8×8格,初始狀態在棋盤中央交叉排放黑白棋子各兩枚,為統計棋子個數,有一個棋子計一分,白棋先走。每個棋手下棋時,擺子的位置必須是以自己的棋子能包圍住對方一個或多個棋子,被包圍的對方棋子將變成自己的棋子。包圍的方向能夠是上下左右以及左右斜線共8個方向,只要能連成一條線即可。當輪到一個棋手擺子,而她沒有能夠包圍對方棋子的位置時,她必須停步,讓對方走棋,直到她能夠走為止。當棋盤上有一方的棋子為0或下滿64格,游戲結束,棋子少者輸。第四章、系統實現4.1系統編程代碼#include<graphics.h>#defineLEFT0x4b00#defineRIGHT0x4d00#defineDOWN0x5000#defineUP0x4800#defineESC0x011b#defineENTER0x1c0dinta[8][8]={0},key,scoreblack[2]={0},scorewhite[2]={0};qipan()/*開始畫面*/{inti,j;setbkcolor(BLUE);for(i=100;i<=420;i+=40){line(100,i,420,i);line(i,100,i,420);}setcolor(0);/*取消圓周圍的一圈東西*/setfillstyle(SOLID_FILL,15);fillellipse(500,200,15,15);setfillstyle(SOLID_FILL,8);fillellipse(500,300,15,15);}playcolor(intt)/*設置棋子第一次的顏色*/{if(t%2==0)setfillstyle(SOLID_FILL,15);elsesetfillstyle(SOLID_FILL,8);}playcolortwo(intxx,intyy)/*走了一步后恢復原來那里的格子*/{if(yy<100)setfillstyle(SOLID_FILL,BLUE);elseswitch(a[(xx-120)/40][(yy-120)/40]){case1:setfillstyle(SOLID_FILL,15);break;case2:setfillstyle(SOLID_FILL,8);break;default:setfillstyle(SOLID_FILL,BLUE);}}qipanchange(intxxx,intyyx,intt)/*棋盤的變化,也就是黑白的變化*/{inti,j,k,kk,ii,jj;i=(xxx-120)/40;j=(yyx-120)/40;playcolor(t);if(j<6)/*開始判斷變化*//*往右邊*/{for(k=j+1;k<8;k++)if(a[i][k]==a[i][j]||!a[i][k])break;if(a[i][k]&&k<8)for(kk=j+1;kk<k&&k<8;kk++){a[i][kk]=a[i][j];fillellipse(120+i*40,120+kk*40,15,15);}}if(j>1)/*往左邊*/{for(k=j-1;k>=0;k--)if(a[i][k]==a[i][j]||!a[i][k])break;if(a[i][k]&&k>=0)for(kk=j-1;kk>k&&k>=0;kk--){a[i][kk]=a[i][j];fillellipse(120+i*40,120+kk*40,15,15);}}if(i<6)/*往下*/{for(k=i+1;k<8;k++)if(a[k][j]==a[i][j]||!a[k][j])break;if(a[k][j]&&k<8)for(kk=i+1;kk<k&&k<8;kk++){a[kk][j]=a[i][j];fillellipse(120+kk*40,120+j*40,15,15);}}if(i>1)/*往上*/{for(k=i-1;k>=0;k--)if(a[k][j]==a[i][j]||!a[k][j])break;if(a[k][j]&&k>=0)for(kk=i-1;kk>k&&k>=0;kk--){a[kk][j]=a[i][j];fillellipse(120+kk*40,120+j*40,15,15);}}if(i>1&&j<6)/*右上*/{for(k=i-1,kk=j+1;k>=0&&kk<8;k--,kk++)if(a[k][kk]==a[i][j]||!a[k][kk])break;if(a[k][kk]&&k>=0&&kk<8)for(ii=i-1,jj=j+1;ii>k&&k>=0;ii--,jj++){a[ii][jj]=a[i][j];fillellipse(120+ii*40,120+jj*40,15,15);}}if(i<6&&j>1)/*左下*/{for(k=i+1,kk=j-1;k<8&&kk>=0;k++,kk--)if(a[k][kk]==a[i][j]||!a[k][kk])break;if(a[k][kk]&&k<8&&kk>=0)for(ii=i+1,jj=j-1;ii<k&&k<8;ii++,jj--){a[ii][jj]=a[i][j];fillellipse(120+ii*40,120+jj*40,15,15);}}if(i>1&&j>1)/*左上*/{for(k=i-1,kk=j-1;k>=0&&kk>=0;k--,kk--)if(a[k][kk]==a[i][j]||!a[k][kk])break;if(a[k][kk]&&k>=0&&kk>=0)for(ii=i-1,jj=j-1;ii>k&&k>=0;ii--,jj--){a[ii][jj]=a[i][j];fillellipse(120+ii*40,120+jj*40,15,15);}}if(i<6&&j<6)/*右下*/{for(k=i+1,kk=j+1;kk<8&&kk<8;k++,kk++)if(a[k][kk]==a[i][j]||!a[k][kk])break;if(a[k][kk]&&kk<8&&k<8)for(ii=i+1,jj=j+1;ii<k&&k<8;ii++,jj++){a[ii][jj]=a[i][j];fillellipse(120+ii*40,120+jj*40,15,15);}}}doscore()/*處理分數*/{inti,j;scorewhite[0]=scorewhite[1]=scoreblack[0]=scoreblack[1]=0;/*重新開始計分數*/for(i=0;i<8;i++)for(j=0;j<8;j++)if(a[i][j]==1)/*分別統計兩個人的分數*/{scorewhite[1]++;if(scorewhite[1]==10){scorewhite[1]=0;scorewhite[0]++;}}elseif(a[i][j]==2){scoreblack[1]++;if(scoreblack[1]==10){scoreblack[1]=0;scoreblack[0]++;}}}printscore(playnum)/*輸出成績*/{inti,j,k;ints[2];if(playnum==1)/*把分數給這個臨時變量*/for(i=0;i<2;i++)s[i]=scorewhite[i];elsefor(i=0;i<2;i++)s[i]=scoreblack[i];if(playnum==1)/*清楚以前的成績*/{setfillstyle(SOLID_FILL,BLUE);bar(550,100,640,400);}if(playnum==1)/*判斷輸出的行數*/k=200;elsek=300;setcolor(RED);settextstyle(0,0,4);for(i=0,j=550;i<2;i++,j+=40){switch(s[i])/*判斷要輸出的分數*/{case0:outtextxy(j,k,"0");break;case1:outtextxy(j,k,"1");break;case2:outtextxy(j,k,"2");break;case3:outtextxy(j,k,"3");break;case4:outtextxy(j,k,"4");break;case5:outtextxy(j,k,"5");break;case6:outtextxy(j,k,"6");break;case7:outtextxy(j,k,"7");break;case8:outtextxy(j,k,"8");break;case9:outtextxy(j,k,"9");break;}}setcolor(0);}playwin()/*輸出最后的勝利者結果*/{settextstyle(0,0,4);setcolor(12);if(scoreblack[0]>scorewhite[0])outtextxy(100,50,"blackwin!");elseif(scoreblack[0]<scorewhite[0])outtextxy(100,50,"whitewin!");elseif(scoreblack[0]==scorewhite[0]){if(scoreblack[1]==scorewhite[1])outtextxy(60,50,"youallwin!");elseif(scoreblack[1]>scorewhite[1])outtextxy(100,50,"blackwin!");elseif(scoreblack[1]<scorewhite[1])outtextxy(100,50,"whitewin!");}}playtoplay()/*人人對戰*/{intxx,yy,t=0,sum,i,j;while(1){xx=120,yy=80;/*每次棋子一開始出來的坐標*/while(1){printscore(1);/*輸出玩家1的成績*/printscore(2);/*輸出玩家2的成績*/playcolor(t);fillellipse(xx,yy,15,15);key=bioskey(0);sound(100);nosound();if(key==ESC)break;elseif(key==ENTER)/*如果按鍵確定就能夠跳出循環*/{if(yy!=80&&a[(xx-120)/40][(yy-120)/40]!=1&&a[(xx-120)/40][(yy-120)/40]!=2)/*是否已經有子*/{if(t%2==0)a[(xx-120)/40][(yy-120)/40]=1;elsea[(xx-120)/40][(yy-120)/40]=2;qipanchange(xx,yy,t);/*走好一步棋子后屏幕的變化*/doscore();/*分數的改變*/break;/*判斷成功就下一個棋子走*/}elsecontinue;/*不成功就等于白按回車*/}elseif(ke

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論