1. 程式人生 > >程式設計:剪刀、石頭、布(二)

程式設計:剪刀、石頭、布(二)

問題及程式碼

/*煙臺大學計算機與控制工程學院
題目描述:剪刀石頭布小遊戲。功能包括:
    (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的BOMDOM操作節點以及表格

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,AdaboostGBDT 和 xgboost

AdaBoost 演算法的訓練誤差分析 AdaBoost最基本的性質是它能在學習過程中不斷減少訓練誤差,即在訓練資料集上的分類誤差率。 定理:AdaBoost的訓練誤差界: 1

Delphi中Chrome ChromiumCef3學習筆記

原文   http://blog.csdn.net/xtfnpgy/article/details/46635739   用Tchromium替換webbrowser   用慣了EmbeddedWB,不想

javascript系列 ————詞法作用域作用域鏈

詞法作用域就是定義在詞法階段的作用域。換句話說,詞法作用域是由你在寫程式碼時將 變數和塊作用域寫在哪裡來決定的,因此當詞法分析器處理程式碼時會保持作用域不變(大部分情 況下是這樣的)。               &

C語言面向物件程式設計虛擬函式與多型3

 在《 C++ 程式設計思想》一書中對虛擬函式的實現機制有詳細的描述,一般的編譯器通過虛擬函式表,在編譯時插入一段隱藏的程式碼,儲存型別資訊和虛擬函式地址,而在呼叫時,這段隱藏的程式碼可以找到和實際物件一致的虛擬函式實現。     我們在這裡提供

基於STM32F407的bootloaderIAPFlash_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庫SDIODMAFatFs使用教程

使用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帶來的優勢是遠遠大於它的缺點的。因此仍然是個極好的東西,不要對它有偏見,特別是在我們後面介紹的更牛的技術前面,千萬不要。最大的也是最明顯的缺點應該就是它的視角問

SocketWebservice和Json

socket和webservice都有跨平臺的優點,但是:         socket偏底層,效率高,但是開發成本大。         webservice效率低,但是開發成本低廉。 webservice,基於http協議,以xml為載體的通訊方式。     好處,一直觀