程式設計:剪刀、石頭、布(二)
問題及程式碼
/*煙臺大學計算機與控制工程學院 題目描述:剪刀石頭布小遊戲。功能包括: (1)人機對戰可以自定義遊戲局數; (2)玩家對戰有三局和五局模式 (2)採用計分法; 作者:展一 完成時間:2017年1月5日 */ #include <stdio.h> #include <stdlib.h> #include <time.h> void first_menu();//主選單 void second_menu();//二級選單 void per_com(int*,int*,int*);//人機 void third_menu();//三級選單 void per_per3(int*,int*);//玩家三局 void per_per5(int*,int*);//玩家五局 int main() { int game_num,choice,pattern_num,x,i,per=0,com=0,sum1=0,sum2=0,*p_per,*p_com,*p_x,*p_sum1,*p_sum2; p_per=&per; p_com=&com; p_sum1=&sum1; p_sum2=&sum2; first_menu(); scanf("%d",&choice); if(choice==1) { printf("請輸入你要玩的局數:"); scanf("%d",&game_num); for(i=0; i<game_num; i++) { second_menu(); scanf("%d",&x); p_x=&x; per_com(p_per,p_com,p_x); } printf("您的得分為:%d 電腦的得分為:%d\n",per,com); if(per==com) { printf("平局!"); } else if(per>com) { printf("你很厲害!"); } else { printf("再接再厲!"); } } else if(choice==2) { third_menu(); scanf("%d",&pattern_num); if(pattern_num==1) { for(i=0; i<3; i++) { per_per3(p_sum1,p_sum2); } printf("玩家一的得分為:%d 玩家二的得分為:%d\n",sum1,sum2); if(sum1==sum2) { printf("平局!"); } else if(sum1>sum2) { printf("玩家一勝出!"); } else { printf("玩家二勝出!"); } } else if(pattern_num==2) { for(i=0; i<5; i++) { per_per5(p_sum1,p_sum2); } printf("玩家一的得分為:%d 玩家二的得分為:%d\n",sum1,sum2); if(sum1==sum2) { printf("平局!"); } else if(sum1>sum2) { printf("玩家一勝出!"); } else { printf("玩家二勝出!"); } } else { printf("謝謝使用!"); return 0; } } else { printf("謝謝使用!"); return 0; } return 0; } /************************************************************* 功能描述:遊戲開始時選擇遊戲模式的主選單 其他說明:無 *************************************************************/ void first_menu() { printf(" 歡迎進入小蠢蛋剪刀、石頭、布遊戲系統\n"); printf("請輸入編號選擇你要進行的對局模式:\n"); printf("1:人機對戰\n"); printf("2:玩家對戰\n"); printf("3:退出遊戲\n"); printf("請選擇:"); } /************************************************************* 功能描述:人機模式下選擇出招的選單 其他說明:無 *************************************************************/ void second_menu() { printf("請輸入以下編號:\n"); printf("1:剪刀\n"); printf("2:石頭\n"); printf("3:布\n"); } /************************************************************* 功能描述:人機模式對戰,可以判斷勝負並累計積分…… 輸入引數:n-玩家與電腦出招編號的差,用來評判勝負 p_x-玩家的出招代表的編號 y-電腦的出招代表的編號 p-per-玩家的積分 p_com-電腦的積分 返 回 值: p_per和p_com 其他說明:無 *************************************************************/ void per_com(int*p_per,int*p_com,int*p_x) { int y,n; srand(time(0)); y=rand()%3+1; n = *(p_x)-y; if(n == 0) { if(*(p_x)==1) printf("我也是剪刀,平局!再來!\n"); else if(*(p_x)==2) printf("我也是石頭,平局!再來!\n"); else printf("我也是布,平局!再來!\n"); } else if(n == -1 || n == 2) { if(*(p_x)==1) { printf("我是布,算你厲害\n"); } else if(*(p_x)==2) { printf("我是剪刀,算你厲害\n"); } else { printf("我是石頭,算你厲害\n"); } (*p_per)++; } else { if(*(p_x)==1) { printf("哈哈哈!我是石頭,你輸了!\n"); } else if(*(p_x)==2) { printf("哈哈哈!我是布,你輸了!\n"); } else { printf("哈哈哈!我是剪刀,你輸了!\n"); } (*p_com)++; } } /************************************************************* 功能描述:玩家對戰模式下選擇對戰局數的選單… 其他說明:無 *************************************************************/ void third_menu() { printf("請輸入編號選擇對局數:\n"); printf("1:三局\n"); printf("2:五局\n"); printf("3:退出遊戲\n"); printf("請選擇:"); } /************************************************************* 功能描述:玩家三局對戰模式,可以判斷勝負並累計積分 輸入引數:n-玩家一與玩家二出招編號的差,用來評判勝負 num1-玩家一的出招 num2-玩家二的出招 p_sum1-玩家一的積分 p_sum2-玩家二的積分 返 回 值:…p_sum1和p_sum2… 其他說明:無 *************************************************************/ void per_per3(int*p_sum1,int*p_sum2) { int num1,num2,n; printf("請玩家一輸入<1表示剪刀、2表示石頭、3表示布>:"); scanf("%d",&num1); printf("請玩家二輸入<1表示剪刀、2表示石頭、3表示布>:"); scanf("%d",&num2); n=num1-num2; if(n == 0) { if(num1==1) printf("玩家一出剪刀,玩家二出剪刀,平局!\n"); else if(num1==2) printf("玩家一出石頭,玩家二出石頭,平局!\n"); else printf("玩家一出布,玩家二出布,平局!\n"); } else if(n == -1 || n == 2) { if(num1==1) { printf("玩家一出剪刀,玩家二出石頭,玩家二勝出!\n"); } else if(num1==2) { printf("玩家一出石頭,玩家二出布,玩家二勝出!\n"); } else { printf("玩家一出布,玩家二出剪刀,玩家二勝出!\n"); } (*p_sum2)++; } else { if(num1==1) { printf("玩家一出剪刀,玩家二出布,玩家一勝出!\n"); } else if(num1==2) { printf("玩家一出石頭,玩家二出剪刀,玩家一勝出!\n"); } else { printf("玩家一出布,玩家二出石頭,玩家一勝出!\n"); } (*p_sum1)++; } } /************************************************************* 功能描述:玩家五局對戰模式,可以判斷勝負並累計積分 輸入引數:n-玩家一與玩家二出招編號的差,用來評判勝負 num1-玩家一的出招 num2-玩家二的出招 p_sum1-玩家一的積分 p_sum2-玩家二的積分 返 回 值:…p_sum1和p_sum2… 其他說明:無 *************************************************************/ void per_per5(int*p_sum1,int*p_sum2) { int num1,num2,n; printf("請玩家一輸入<1表示剪刀、2表示石頭、3表示布>:"); scanf("%d",&num1); printf("請玩家二輸入<1表示剪刀、2表示石頭、3表示布>:"); scanf("%d",&num2); n=num1-num2; if(n == 0) { if(num1==1) printf("玩家一出剪刀,玩家二出剪刀,平局!\n"); else if(num1==2) printf("玩家一出石頭,玩家二出石頭,平局!\n"); else printf("玩家一出布,玩家二出布,平局!\n"); } else if(n == -1 || n == 2) { if(num1==1) { printf("玩家一出剪刀,玩家二出石頭,玩家二勝出!\n"); } else if(num1==2) { printf("玩家一出石頭,玩家二出布,玩家二勝出!\n"); } else { printf("玩家一出布,玩家二出剪刀,玩家二勝出!\n"); } (*p_sum2)++; } else { if(num1==1) { printf("玩家一出剪刀,玩家二出布,玩家一勝出!\n"); } else if(num1==2) { printf("玩家一出石頭,玩家二出剪刀,玩家一勝出!\n"); } else { printf("玩家一出布,玩家二出石頭,玩家一勝出!\n"); } (*p_sum1)++; } }
執行結果
測試資料1:
choice:1
game_num: 1
x: 1
測試資料2:
choice:2
pattern_num:1
sum1:1 2 3
sum2:2 3 1
”相關推薦
程式設計:剪刀、石頭、布(二)
問題及程式碼 /*煙臺大學計算機與控制工程學院 題目描述:剪刀石頭布小遊戲。功能包括: (1)人機對戰可以自定義遊戲局數; (2)玩家對戰有三局和五局模式 (2)採用計分法; 作者:展一 完成時間:2017年1月5日 */ #include <
Java排序算法分析與實現:快排、冒泡排序、選擇排序、插入排序、歸並排序(二)
第一個元素 spa insert 循環 冒泡排序 author 高級算法 ins -s 一、概述: 上篇博客介紹了常見簡單算法:冒泡排序、選擇排序和插入排序。本文介紹高級排序算法:快速排序和歸並排序。在開始介紹算法之前,首先介紹高級算法所需要的基礎知識:劃分、遞歸,並順
MongoDB的文檔、集合、數據庫(二)
一個數 說明 ava 雙向鏈表 upsert block 根據 和數 pat 為了理解MongoDB的名詞,可以將其於關系型數據庫進行對比: 一、文檔 概述 文檔是MongoDB的核心概念,是數據的基本單元,非常類似於關系數據庫中的行。在
目錄文件的瀏覽、管理及維護(二).作業
.cn file height image 維護 nom 列表 logs 刪除空目錄 1) 開啟Linux操作系統,要求以root用戶登錄GNOME圖形界面,右擊桌面打開終端 2) 使用命令切換到root用戶的家目錄 3) 確定當前用戶所在的工作目錄
微信jssdk圖片、語音開發記錄(二)
後臺 pid for item esc 音頻 locals 動態 clas 接著上篇說的,在使用jssdk之前,需要先驗簽,也就是獲取簽名,而獲取簽名就需要幾個參數,時間戳,隨機數,token等,而token一天的獲取次數是有限的, 所以需要在項目中保存獲取到的token,
四、內核啟動(二)
clu 更新 mage onf 指針 內核編譯 try ext 內存空間 4.1 MMU設置續 上一節分析到調用 __armv4_mmu_cache_on,執行如下,這裏我們要分析 set_mmu 函數 4.1.1 __setup_mmu 前文已經分析過在內
JavaScript的BOM、DOM操作、節點以及表格(二)
wid UNC HR 匿名函數 ast clone BE tab 位置 BOM操作 一、什麽是BOM BOM(Browser Object Model)即瀏覽器對象模型。 BOM提供了獨立於內容 而與瀏覽器窗口進行交互的對象; BOM由一系列相關的對象構
聯合分布(二):聯合分布
概率密度函數 可能 出現 src -c back render idt org 在概率論中,對兩個隨機變量X和Y,其聯合分布是同時對於X和Y的概率分布(關於概率分布的理論請參考:點這裏)。 乍一看:“同時對於X和Y的概率分布”,感覺很懵,不懂是啥意思。沒關系,我們帶著這個疑
整合學習之boosting,Adaboost、GBDT 和 xgboost(二)
AdaBoost 演算法的訓練誤差分析 AdaBoost最基本的性質是它能在學習過程中不斷減少訓練誤差,即在訓練資料集上的分類誤差率。 定理:AdaBoost的訓練誤差界: 1
Delphi中Chrome Chromium、Cef3學習筆記(二)
原文 http://blog.csdn.net/xtfnpgy/article/details/46635739 用Tchromium替換webbrowser 用慣了EmbeddedWB,不想
javascript系列 ————詞法作用域、作用域鏈(二)
詞法作用域就是定義在詞法階段的作用域。換句話說,詞法作用域是由你在寫程式碼時將 變數和塊作用域寫在哪裡來決定的,因此當詞法分析器處理程式碼時會保持作用域不變(大部分情 況下是這樣的)。 &
C語言面向物件程式設計:虛擬函式與多型(3)
在《 C++ 程式設計思想》一書中對虛擬函式的實現機制有詳細的描述,一般的編譯器通過虛擬函式表,在編譯時插入一段隱藏的程式碼,儲存型別資訊和虛擬函式地址,而在呼叫時,這段隱藏的程式碼可以找到和實際物件一致的虛擬函式實現。 我們在這裡提供
基於STM32F407的bootloader、IAP、Flash_APP、上位機設計(二)
基於STM32F407的bootloader、IAP、Flash_APP、上位機設計 第一部分:Flash_App設計 前期準備: 一、硬體:STM32F407VET6板一塊,IAP使用串列埠通訊,板上需引出串列埠或有DB9介面都行(如果不使用串列埠,使用其他協議均可)
Java併發程式設計:執行緒池的使用(轉載)
轉載自:https://www.cnblogs.com/dolphin0520/p/3932921.html Java併發程式設計:執行緒池的使用 在前面的文章中,我們使用執行緒的時候就去建立一個執行緒,這樣實現起來非常簡便,但是就會有一個問題: 如果併發的執行緒數量很多,並且每個執行緒都是執行
CoreJava讀書筆記--異常、斷言和日誌(二)--斷言和日誌
使用斷言 在一個具有自我保護能力的程式中,斷言很常用。 (一)斷言的概念 斷言機制允許在測試期間向程式碼中插入一些檢查語句。當代碼釋出時,這些插入的檢測語句將會被自動地移走。Java語言引入了關鍵字assert。assert有兩種形式: assert 條件; 和
備份/恢復系統BAREOS的安裝、設定和使用(二)
備份/恢復系統BAREOS的設定 本文將介紹如何設定bareos系統,將分別介紹Bareos系統主機設定(含Director Daemon、Storage Daemon和Storage Daemon)、客戶機安裝/設定和系統整合測試。 在介紹設定前,我們先簡單介
STM32L4新版HAL庫SDIO(DMA)、FatFs使用教程(二)
使用DMA控制SDIO 上一節已經成功使用普通SDIO模式驅動起SD卡了,但是使用FreeRtos時,CubeMX會強制要求使用DMA模式。下面介紹以DMA模式驅動SDIO的方法。 首先,開啟CubeMX配置好的檔案STM32L476RGT6_SDIO.ioc。 到con
Sybase的安裝、配置及使用(二)
第二章 Create Adaptive Server 1. 開始-》程式-》Sybase-》Server Config 點選Create Adaptive Server…-》輸入Server名稱,如“REYPC”,點選Coninue。 2. 設定伺服器頁大
unity3d 凹凸貼圖、法線貼圖、置換貼圖 (二)
NormalMap 看來可以增加細節,但是它的缺點也很明顯。不過在說缺點之前,要提前說一句--NormalMap帶來的優勢是遠遠大於它的缺點的。因此仍然是個極好的東西,不要對它有偏見,特別是在我們後面介紹的更牛的技術前面,千萬不要。最大的也是最明顯的缺點應該就是它的視角問
Socket、Webservice和Json (二)
socket和webservice都有跨平臺的優點,但是: socket偏底層,效率高,但是開發成本大。 webservice效率低,但是開發成本低廉。 webservice,基於http協議,以xml為載體的通訊方式。 好處,一直觀