第一篇:C程序設計 24點小游戲
1設計內(nèi)容
有2、3、4、5、6、7、8、9、10、J、Q、K、A共13張牌,編一程序,判斷對任意給定的4張牌,能否在進行加、減、乘、除運算后,其運算結(jié)果等于24。其中J按11計算,Q按12計算,K按13計算,A按1計算。如果能得到結(jié)果24,則輸出可得到該結(jié)果的計算表達式。
若輸入數(shù)據(jù)符合要求,且經(jīng)過加、減、乘、除運算后,運行結(jié)果能得到24,如輸入5,5,5,1,則顯示可得到該結(jié)果的計算表達式,如5*(5-(1/5))。
若輸入數(shù)據(jù)小于1或者大于13或者不是整數(shù)時,提示輸入錯誤。若輸入不能運算出24的數(shù)據(jù),如1,1,1,1,則顯示經(jīng)過加、減、乘、除運算后,運行結(jié)果不能得到24。
2程序設計
2.1存儲結(jié)構(gòu)設計
由于要儲存的數(shù)據(jù)不多,主要是儲存所輸入的4個整數(shù),所以采用一維數(shù)組(a[4])儲存。而計算過程會出現(xiàn)小數(shù),所以數(shù)據(jù)類型采用浮點型(float)。
2.2主要程序設計
程序采用窮舉法,對輸入的4個數(shù)進行排列,有 4!=24種。用for來循環(huán),if來判斷,算法如下。for(i=0;i<4;i++)for(j=0;j<4;j++)if(j!=i)for(k=0;k<4;k++)if(k!=j && k!=i)for(l=0;l<4;l++)if(l!=i && l!=j && l!=k){ calculate(a[i],a[j],a[k],a[l]);}
用if來判斷括號的類型,然后作出不同順序的運算。括號有兩對,主要有兩種類型:一種是()()型,如(a+b)*(c+d);另一種是(())型,繼續(xù)細分又有
種類型,如下a*(b*(c+d)),(a*(b+c))*d,a*((b+c)*d),((a+b)*c)*d。算法如下 if((!(i==3 && b==0))&&(!(j==3 && c==0))&&(!(k==3 && d==0))){ sum1=arithmetic(i,a,b);sum2=arithmetic(j,sum1,c);sum3=arithmetic(k,sum2,d);} if(k==2){ sum1=arithmetic(i,a,b);sum2=arithmetic(j,c,d);sum3=sum1*sum2;} if(k==3){ sum1=arithmetic(i,a,b);sum2=arithmetic(j,c,d);if(sum2!=0){ sum3=sum1/sum2;} } 在輸入方面,按要求,數(shù)據(jù)類型是 1 至13 的整數(shù),符合則進行運算,不符合則重新輸入。用if語句來實現(xiàn),如下 if(a[i]<1 || a[i]>13 || a[i]!=int(a[i]))
在輸出方面,運算結(jié)果等于 24就輸出,利用調(diào)用的參數(shù)判斷輸出形式,有5種:(a+b)*(c+d),a*(b*(c+d)),(a*(b+c))*d,a*((b+c)*d),((a+b)*c)*d。算法如下:
void show(int type,int i,int j,int k,float a,float b,float c,float d){ if(type==1){
if(j==4 || j==5){
if(k==4 || k==5)
cout< else cout<<“(”< else if(k==4 || k==5) cout< } else cout<<“((”< } if(type==2 || type==3){ cout<<“(”< 程序流程框圖如圖2-3所示: 圖2-3 3程序調(diào)試 3.1測試用例 開始運行時的頁面如圖4-1所示: 圖4-1 首先,測試程序能不能運算出正確的結(jié)果,輸入數(shù)據(jù)6,6,6,6,出現(xiàn)了44組符合要求的解,如圖4-2所示。 接著輸入數(shù)據(jù)2,9,7,14,提示輸入錯誤,重新輸入2,7,5,13,能得到正確運行結(jié)果,如圖4-2所示。 輸入4,9,11,13,不能運算得到24,顯示“你所輸入的數(shù),經(jīng)過四則運算后,不等于24點”,如圖4-3所示。 輸入5,5,5,1,這組數(shù)據(jù)要運算得到24,一定會出現(xiàn)小數(shù),因為只有一種運算,即5*(5* /“ 4個運算符號選3個,有4*4*4=64種 for(j=0;j<6;j++) // 3種運算符排列 有 3!=6 種 for(k=0;k<6;k++) { if((!(i==3 && b==0))&&(!(j==3 && c==0))&&(!(k==3 && d==0)))// 括號的類型為(()){ // 3為做除法運算的標志,除數(shù)為 0 時,跳過 = = sum1=arithmetic(i,a,b); //a,b做 以 i 為標志的運算,然后把值賦給sum1 sum2=arithmetic(j,sum1,c);//sum1,c做 以 j 為標志的運算,然后把值賦 給sum2 sum3=arithmetic(k,sum2,d);//sum2,d做 以 k 為標志的運算,然后把值賦給sum3 if(fabs(sum3-24)<0.001)//判斷能否運算出24,出現(xiàn)小數(shù)時,能夠包含在內(nèi) { check++; //標志能運算出24 show(1,i,j,k,a,b,c,d);// 輸出運算出 24 的表達式 } } if(k==2)//()*() { sum1=arithmetic(i,a,b);//a,b做 以 i 為標志的運算,然后把值賦給sum1 sum2=arithmetic(j,c,d);//sum1,c做 以 j 為標志的運算,然后把值賦給sum2 sum3=sum1*sum2; if(fabs(sum3-24)<0.001)//出現(xiàn)小數(shù)時,能夠包含在內(nèi) { check++; //標志能運算出24 show(2,i,j,k,a,b,c,d);// 輸出運算出 24 的表達式 } } if(k==3)// 括號的類型為()() { sum1=arithmetic(i,a,b);//sum1,c做 以 j 為標志的運算,然后把值賦給sum2 sum2=arithmetic(j,c,d);//sum1,c做 以 j 為標志的運算,然后把值賦給sum2 if(sum2!=0) { sum3=sum1/sum2; if(fabs(sum3-24)<0.001)//出現(xiàn)小數(shù)時,能夠包含在內(nèi) { check++; //標志能運算出24 show(3,i,j,k,a,b,c,d); // 輸出運算出 24 的表達式 } } } } } void main(){ int i,j,k,l,m=0; float a[4]; //儲存所輸入的 4個 整數(shù) while(m==0){ m=1; cout<< ”請輸入4 個 1--13 的整數(shù):“< for(i=0;i<4;i++){ cin>>a[i]; if(a[i]<1 || a[i]>13 || a[i]!=int(a[i]))//判斷是否為符合要求的整數(shù) { if(m!=0){ } cout<<”輸入錯誤,請重新輸入!“< m=0;} } for(i=0;i<4;i++) //4的排列 4!=24,每中情況調(diào)用calculate for(j=0;j<4;j++) if(j!=i) //第2數(shù)和第1個數(shù)不能重復 for(k=0;k<4;k++) if(k!=j && k!=i)//第3數(shù)和第1,2個數(shù)不能重復 for(l=0;l<4;l++) if(l!=i && l!=j && l!=k)//第4數(shù)和第1,2,3個數(shù)不能重復 { calculate(a[i],a[j],a[k],a[l]);//調(diào)用calculate函數(shù),進行進行加、減、乘、除運算 } } if(check==0)//不能運算出24 { cout<<”你所輸入的數(shù),經(jīng)過四則運算后,不等于24點"< 程序設計實驗 大作業(yè) 成績: 學院:班級:學號:指導老師:姓名:實驗項目名稱:猜數(shù)字游戲 一、實驗要求 根據(jù)所學知識編寫一個小游戲--猜數(shù)字游戲 二、實驗目的為了加深對編程課程的基本知識的理解和掌握,并且掌握編程和程序調(diào)試的技巧通過程序的設計訓練和提高學生的基本技能,掌握字符串的表示方法和字符串函數(shù)的功能、編程軟件操作的基本知識、鍵盤上特殊鍵的獲取以及圖形方式下光標的顯示,提高編程興趣與編程水平,學會如何正確的書寫程序設計說明文檔,提高解決實際問題的能力,鞏固語法規(guī)則的理解和掌握,學會通過源程序?qū)懗隽鞒虉D,提高自學以及查閱資料的能力。 三、功能模塊分析 1.系統(tǒng)能夠隨機產(chǎn)生一個1到1000的數(shù)字 2.比較輸入數(shù)字與隨機產(chǎn)生數(shù)字的大小 3.選擇是否繼續(xù)游戲 四、修改處 1.將輸出內(nèi)容由英文變?yōu)闈h字 2.改變背景及輸出字體的顏色將隨機產(chǎn)生的數(shù)值范圍由1-100變?yōu)?-1000 四、設計思路 # include # include # include main() {void textbackground(int color); system(“color fc”); int a,b; char c; srand(time(NULL)); a=1+(rand()%1000); printf(“這有一個數(shù)字從1到1000.n你能猜出它嗎?n輸入你猜的數(shù)字.n”);scanf(“%d”,&b); while(b!=-1) { if(b==a) { printf(“恭喜你猜對了!n你喜歡再玩一遍嗎?(y or n)?”); scanf(“%c”,&c); scanf(“%c”,&c); switch(c){ case 'y': printf(“這有一個數(shù)字.n你能猜出它嗎?n輸入你猜的數(shù)字.n”);scanf(“%d”,&b); break; case 'n': break; } } while(b { printf(“低了,再試一次.”); scanf(“%d”,&b); } while(b>a) { printf(“高了,再試一次.”); scanf(“%d”,&b); } } } 未修改前截圖 更改后截圖 四、體會心得 通過本次試驗我見識到了C語言的重要性和我在程序設計方面的不足,讓我了解到要把書本知識轉(zhuǎn)換為可以實際操作的東西是需要扎實的理論基礎和嚴謹?shù)倪壿嬎季S的,同時我也發(fā)現(xiàn)了平時很多沒有注意到的問題,彌補了我C語言方面的不足,在設計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固,通過實踐的學習,我認識到學好計算機要重視實踐操作 Java程序設計實驗報告 班級: 學號: 姓名: 實驗題目:猜拳小游戲 實驗要求: 用java編寫一個人機對戰(zhàn)的猜拳小游戲。人選擇性出拳,電腦隨機出拳,判斷輸贏,記錄輸贏情況。有簡單的操作界面。 實驗內(nèi)容: 1、問題分析過程: (1)首先分析猜拳游戲本身的玩法: 人選擇性出拳,電腦隨機出拳,判斷輸贏,記錄輸贏情況。(2)用面向?qū)ο蟮乃枷雭矸治觯?/p> 在游戲過程中有幾個對象組成人 電腦 游戲規(guī)則 抽象出3個類:Person、Computer、Game Person類有哪些屬性和行為呢? 屬性:名字name,輸贏次數(shù)(比分)score 行為:出拳ShowFirst() 選擇性 Computer類有哪些屬性和行為呢? 屬性:名字name,輸贏次數(shù)(比分)score 行為:出拳showFist() 隨機 Game類有哪些屬性和行為呢? 屬性:游戲的雙方(person、computer)、對戰(zhàn)局數(shù)count 行為:產(chǎn)生角色initial()、游戲規(guī)則startGame()、顯示比賽結(jié)果showResult()、統(tǒng)計 比賽結(jié)果calcResul() 2、主要實現(xiàn)代碼: import java.util.*;public class StartGame { public static void main(String[]args){ Game start = new Game();//實例化游戲類 start.initial();//調(diào)用初始化方法 start.startGame();//調(diào)用游戲開始方法 start.showResult();//調(diào)用游戲結(jié)果顯示方法 } } import java.util.*;public class Person { String name;//名字屬性 int score;//積分屬性 //出拳方法 public int showFist(){ System.out.print(“n請出拳:1.剪刀2.石頭3.布(輸入相應數(shù)字):”); Scanner input = new Scanner(System.in); int num = input.nextInt(); String fist = “";//保存出拳 switch(num){ case 1: fist = ”剪刀“; break; case 2: fist = ”石頭“; break; case 3: fist = ”布“; break; } System.out.println(name + ”出拳:“ + fist); return num;} } import java.util.*;public class Game { //Person person; //甲方 //Computer computer;//乙方 int count; //對戰(zhàn)次數(shù) Person person = new Person();//實例化用戶類 Computer computer = new Computer();//實例化計算機類 //初始化方法 public int initial(){ count = 0; return count;} //游戲開始方法 public void startGame(){ //顯示游戲開始界面 System.out.println(”---------------歡 迎 進 入 游 戲 世 System.out.println(“tt******************************”); System.out.println(“tt** ^_^ 猜拳,Start ^_^ **”); System.out.println(“tt*****************************”); 界--------------n“); System.out.println(”nn出拳規(guī)則:1.剪刀 2.石頭 3.布“);//選擇計算機角色 System.out.print(”請選擇對方角色:1.劉備 2.孫權(quán) 3.曹操:“);Scanner input = new Scanner(System.in);int num = input.nextInt();switch(num){ case 1: computer.name = ”劉備“;break;case 2: computer.name = ”孫權(quán)“;break;case 3: } computer.name = ”曹操“;break;//輸入用戶角色名 System.out.print(”請輸入你的姓名:“);person.name = input.next(); //顯示對戰(zhàn)雙方 System.out.print(person.name + ” VS “ + computer.name + ” 對戰(zhàn)n“);//開始游戲 System.out.print(”n要開始嗎?(y/n)“);String con = input.next();int perFist;//用戶出的拳 int compFist;//計算機出的拳 if(con.equals(”y“)){//判斷是否開始 String answer = ”y“; while(”y“.equals(answer)){//循環(huán)條件是是否開始下一輪 //出拳 perFist = person.showFist();//調(diào)用用戶出拳方法 compFist = computer.showFist();//調(diào)用計算機出拳方法 //裁決 if((perFist == 1 && compFist == 1)|| (perFist == 2 && compFist == 2)|| (perFist == 3 && compFist == 3)){ System.out.println(”結(jié)果:和局,真衰!n“);//平局 } else if((perFist == 1 && compFist == 3)|| (perFist == 2 && compFist == 1)|| (perFist == 3 && compFist == 2)){ System.out.println(”結(jié)果:恭喜, 你贏了!n“);//用戶贏 person.score++; //累計用戶積分 } else{ } } System.out.println(”結(jié)果說:^_^,你輸了,真笨!n“);//計算機贏 computer.score++; //累計計算機積分 } count++;//累計對戰(zhàn)次數(shù) System.out.print(”是否開始下一輪(y/n):“);answer = input.next();} //比較得分情況的方法 public void showResult(){ System.out.println(”-----------------------“);System.out.println(computer.name + ” VS “ + person.name); System.out.println(”對戰(zhàn)次數(shù):“ + count);System.out.println(”n姓名t得分n“ + person.name + ”t“ + person.score + ”n“ + computer.name + ”t“ + computer.score + ”n“); //比較積分 if(computer.score == person.score){ System.out.println(”結(jié)果:打成平手,下次再和你一分高下!“); } else if(computer.score < person.score){ System.out.println(”結(jié)果:你果然是高手,“ + computer.name + ”佩服!“); } else{ System.out.println(”結(jié)果:呵呵,笨笨,下次加油哦!“); } System.out.println(”-----------------------“);} } public class Computer { String name;//名字屬性 int score;//積分屬性 //出拳方法 public int showFist(){ int num =(int)(Math.random()*3)+ 1;String fist = ”“;switch(num){ case 1: fist = ”剪刀“; break;case 2: fist = ”石頭“; break;case 3: fist = ”布“; break; } System.out.println(name + ”出拳:" + fist); return num;} } 運行界面: 3、實驗心得體會: 從本次課程設計的完成中,我發(fā)現(xiàn)我有很多不足的地方,最突出的是所掌握的知識太少,學到的知識應用不到實踐中。后來通過看書查找相關資料,完成課程設計任務。 程序設計語言是程序設計的工具,如果想有效的設計程序,正確的應用程序表達算法,必須準確應用程序設計語言;學習程序設計,必須要多讀程序,并試著自己編寫程序,多上機調(diào)試程序代碼。 游戲1:記名字 這個游戲適合初次見面用來記住在座各位的名字。主持者等各人做好自我介紹之后說好規(guī)則:大家一起有節(jié)奏的拍掌(兩拍接一響指),然后主持人說一個名字,此人不用動作,繼續(xù)拍掌(兩拍接一響指),左手邊的人喊另外一個人的名字,繼續(xù)拍掌,一直下去,錯了受罰。 另外一種玩法:圍成一圈,第一個人說“我叫XXX,我喜歡打籃球”,第二個人必須說,“我是站在喜歡打籃球的XXX旁邊的喜歡吃醋的YYY”,第三個人就必須說前面兩個人的特性和名字了,排在最后那老兄就慘了,要說十幾個人,不過他也聽得最多,所以還是說得出的。這樣一圈,名字就都記住了,接下來可以更熟一點。 游戲:2:(壓軸、力薦)拉拉手 1.讓全體同學站到場中央,分散開,手牽手成一個圈 2.觀察一下左手牽的是誰的右手,右手牽的是誰的左手(重點) 3.然后松開手,打亂次序站在一起不留空隙 4.不要移動腳,像剛才那樣左右手相對應拉手 5.緩慢解開(注意安全) 目的:訓練大家的團隊意識 游戲3:連連看 1.兩位主持站隊前,分別對第一位同學說一個具體意象,如釣魚、劃船、月亮、皇冠、圣誕老人等 2.第一位同學不許說話,用動作表演給第二位同學,第二位表演給第三位看……直到最后一位同學說出具體意象 3.再來兩隊 游戲4:交換名字 內(nèi)容:這個游戲乃在于考驗人們的習性。平常對于自己的名字,可說是耳熟不過了,但若臨時更換名字,可就會覺得陌生了。 方法: (1)人數(shù)在 10 個人最適合(2)參加者圍成一個圓圈坐著。 (3)圍個圓圈的時候,自己隨即更換成右鄰者的名字。 (4)以猜拳的方式來決定順序,然后按順序來提出問題。 (5)當主持人問及“張三先生,你今天早上幾點起床?”時,真正的張三不可以回答,而必須由更換成張三的名字的人來回答:“恩,今天早上我 7點鐘起床!”?? (6)當自己該回答時卻不回答,不是自己該回答的人就要被淘汰。 (7)最后剩下的一個人就是勝利者。 游戲5:直呼其名 時間:10~15分鐘 人數(shù): 不限,人數(shù)較多時,需要將隊員劃分成若干個由15~20個人組成的小組。 目的:幫助大家記住彼此的名字。 準備: 步驟: 1.選一塊寬闊平整的游戲場地。 2.隊員們以小組為單位站成一圈。每人相距約一臂長。作為培訓專員的你也不例外。 3.告訴小組游戲?qū)哪闶掷镩_始。你大喊出自己的名字,然后將手中的球傳給自己左邊的隊友。接到傳球的隊友也要如法炮制,喊出自己的名字,然后把球傳給自己左邊的人。這樣一直繼續(xù)下去,直到球又重新回到你的手中。 4.你重新拿到球后,告訴大家現(xiàn)在我們要改變游戲規(guī)則了?,F(xiàn)在接到球的隊員必須要喊出另一個隊員的名字,然后把球扔給該隊員。 5.幾分鐘后,隊員們就會記住大多數(shù)隊友的名字,這時,再加一只球進來,讓兩個球同時被扔來扔去,游戲規(guī)則不變。 6.在游戲接近尾聲的時候,再把第三只球加進來,其主要目的是讓游戲更加熱鬧有趣。 7.游戲結(jié)束后,在解散小組之前,邀請一個志愿者,讓他在小組內(nèi)走一圈,報出每個人的名字。 討論問題示例: 安全: 注意扔球的時候不可用力過猛。你最初的扔球應當是一個較慢的高球,為后續(xù)的扔球手法樹立典范。 變通:1.如果幾個小組同時在玩這個游戲,可以讓不同的小組在游戲中間交換一半隊員。 2.讓隊員們可以隨心所欲地更換小組。被新小組接納的唯一條件是新成員在站好位置后喊出自己的名字,以便其他隊員扔球給他。 一 團隊精神游戲 一 快樂傳真 每個組5-8個人為宜,一組人按1行胸對背的排列。第一個人面向主持人其余人向后轉(zhuǎn),背向第一個人。第一個人看主持人給的題目,看完后,主持人收起題目,第一個人拍第二個人肩膀示意讓其轉(zhuǎn)身。第一個人通過肢體語言,把剛剛看到的詞語的含義表示出來,然后第二個人根據(jù)自己的理解同樣把自己的理解通過肢體語言傳遞給第三個人。以此類推。傳到該組最后一個人時,這個人需要說出成語。比賽過程中不得以語言或口形提示。沒有說出成語的團隊接受懲罰。如:一箭雙雕垂頭喪氣口是心非亡羊補牢十拿九穩(wěn)樹大招風一口吃個大胖子槍打出頭鳥放下屠刀立地成佛,猴子撈月等 二 盲人方陣(考驗團隊協(xié)作,集體智慧,領導能力) 全體隊員戴好眼罩,利用繩子,在規(guī)定的時間內(nèi)做成一個正方形(所有的人相對均勻的分布在正方形的各個邊上),菱形或圓形等(抽簽決定) 三 盲人摸號 用語言、表情、甚至眼神溝通并傳遞信息都不是難事,現(xiàn)在這個游戲卻要打破常規(guī),制造一些限制條件來訓練學生的溝通能力,并讓他們體會改變自己已適應環(huán)境和條件的限制。 1給組員戴上眼罩。 2發(fā)給每人一個號碼,這個號碼只有本人知道。 3讓這些受訓者根據(jù)每人的號碼,按從大到小的順序排成一列。這個過程中任何人都不能說話或發(fā)出聲音,如果有人摘下眼罩或說話,游戲即告失敗。 這個游戲需要考驗的是: 1你是怎樣與其他成員交流的。 2你們用什么方法得知別人的號數(shù)和位置? 四 你畫我猜 跟QQ游戲里的你畫我猜游戲規(guī)則類似,每組派一到兩個組員畫,其余的人猜,時間最短的獲勝。 五 瞎子瘸子 目的:溝通配合能力,活躍氣氛游戲規(guī)則: 每組派三男三女,男生背女生,男生當“瞎子”,用紗巾蒙住眼睛,女生扮“瘸子”,為“瞎子”指引路,繞過路障,達到終點,其中路障設置可擺放椅子,須繞行;鮮花,須拾起,遞給女生。最早到達者,為贏。可以同時多組一起比賽。 六 “誰是臥底” 游戲人數(shù):最好7個游戲者,1個臥底,若干不明所以圍觀者。游戲規(guī)則:在場7個人中6個人拿到相同的一個詞語,剩下的1個拿到與之相關的另一個詞語。每人每輪只能說一句話描述自己拿到的詞語(不能直接說出來那個詞語),與不能讓臥底發(fā)現(xiàn),也要給同胞以暗示。每輪描述完畢,7人投票選出懷疑是臥底的那個人,得票數(shù)最多的人出局,倆個人一樣多的話,待定(就是保留)。若有臥底撐到剩下最后三人,則臥底獲勝,反之,則大部隊獲勝。比如胡子和眉毛,豬肉和牛肉等等 七 100s不NG(可以作為輸隊的懲罰) 簡單來說就是參加游戲的每一個人都要在規(guī)定的時間內(nèi)一次性完成他的任務,而且要大家都要一次性連貫的做完,中間如果有誰沒有完成任務,或者是超過時間,都要重頭來過。 1.第一關組員做左轉(zhuǎn)三圈右轉(zhuǎn)三圈,重復三次走直線。做完說“哦吧,gangan style” 2第二關組員跳騎馬舞,加動作。 3第三關組員做五個俯臥撐并拿起旁邊的橫幅說出通關密語:恭喜發(fā)財.4最后一關還在想。。 小懲罰: 大茶壺我是茶壺矮又肥,——作矮肥狀這是壺嘴這是柄,——一手側(cè)前點作壺嘴狀,一手撐腰作壺柄狀,呼啦啦,呼啦啦,——雙手向上揚作水蒸氣狀水開啦,水開啦,——雙手向上揚作水蒸氣狀倒茶,倒茶。 ——壺嘴狀之手點作斟茶狀,另一手作壺柄狀。 Ps:先隨便想了點點子,你看下,根據(jù)時間啊,可行性什么的,看看有么有用的上的。有用得上的游戲再來具體策劃吧!(*^__^*)??第二篇:C語言小游戲程序設計
第三篇:Java猜拳小游戲程序設計實驗報告
第四篇:小游戲
第五篇:小游戲