• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            鄙人這輩子編寫的第一個(gè)游戲程序:猜拳! 好激動(dòng),共享下c++源代碼

            石頭剪子布的猜拳游戲,在VC下編譯運(yùn)行下,生成的.EXE文件,就可以單獨(dú)拿出來玩游戲了。
            這個(gè)游戲?qū)儆?.1版本,最原始的1.0版本主要部分和這個(gè)差不多,1.1主要是在原來的基礎(chǔ)上與玩家的交互做了一些更加友好的改進(jìn)(感謝提出改進(jìn)意見的宿舍兄弟)
            程序基本沒有太大的技術(shù)含量,自認(rèn)為程序核心的部分:電腦隨機(jī)給出的猜拳。本人想到了一個(gè)很簡單但自認(rèn)為挺巧妙的方法(小小的驕傲下),不多說了看代碼吧,如果代碼有什么潛在的bug漏洞,或者有更好的改進(jìn),請留言回復(fù),非常謝謝。
              1#include<iostream>
              2#include<ctime>
              3using namespace std;
              4
              5int win_or_loss(int);//判斷輸贏的子函數(shù)
              6void baoshi(time_t&);//給出當(dāng)前系統(tǒng)時(shí)間的子函數(shù)
              7void keep_window_open();//讓程序運(yùn)行完畢后,窗口不立馬消失
              8int main()
              9{
             10    time_t the_time_1,the_time_2;
             11
             12    char q;
             13    int win(0),loss(0),ping(0);
             14    double gailv(0),sum(0);
             15    cout<<"歡迎您玩 石頭-剪子-布 游戲(游戲作者:XXX)  版本 1.1\n"<<endl;
             16    cout<<"請合理安排時(shí)間,切勿沉迷于游戲!\n"<<endl;
             17
             18    baoshi(the_time_1);
             19    cout<<"游戲說明:數(shù)字1代表石頭    數(shù)字2代表剪子    數(shù)字3代表布\n"<<endl;    
             20
             21    
             22    
             23    
             24    do{
             25        cout<<"\n請問您一共想要玩幾次猜拳游戲,請輸入大于0的正整數(shù)(建議您至少玩十次):"<<endl;
             26        double times;
             27        //輸入的次數(shù)必須為大于0的正整數(shù),不可為0,負(fù)數(shù),浮點(diǎn)數(shù),字符或者是字符串,如果出現(xiàn)非法輸入,下面代碼是用來處理這些非法輸入
             28        while(!(cin>>times))
             29        {
             30            cout<<"您的輸入不合法,必須為一個(gè)數(shù)字,請重新輸入:"<<endl;
             31            cin.clear();
             32            cin.sync();
             33        }

             34        if(times<=0)
             35        {
             36            cout<<"您的輸入不合法,必須為正整數(shù)!\n"<<endl;
             37            cin.clear();
             38            cin.sync();
             39            q='y';
             40            continue;
             41        }

             42        else if(times!=int(times))
             43        {
             44            cout<<"您的輸入不合法,必須為正整數(shù)!\n"<<endl;
             45            cin.clear();
             46            cin.sync();
             47            q='y';
             48            continue;
             49        }

             50        //游戲正式開始
             51        for(int i=0;i<times;++i)
             52        {
             53            cout<<"\n請輸入您打算猜的拳(用數(shù)字123代替,數(shù)字1代表石頭  數(shù)字2代表剪子  數(shù)字3代表布)"<<endl;
             54        
             55            while(1)
             56            {
             57                double t;
             58                cin>>t;
             59                if(cin.bad())
             60                {
             61                    cerr<<"Sorry,出現(xiàn)了系統(tǒng)故障,請重新運(yùn)行游戲!\n"<<endl;
             62                    return 1;
             63                }

             64                //用來處理非法輸入
             65                if(cin.fail())
             66                {
             67                    cerr<<"Sorry!,請您必須輸入一個(gè)合法的數(shù)字(1 or 2 or 3)"<<endl;
             68                    cout<<"請輸入您打算猜的拳(用數(shù)字123代替)"<<endl;
             69                    cin.clear();
             70                    cin.sync();
             71                    continue;
             72                }
            else if(t!=1&&t!=2&&t!=3)
             73                {
             74                    cerr<<"Sorry!,請您必須輸入一個(gè)合法的數(shù)字(1 or 2 or 3)\n"<<endl;
             75                    cout<<"請輸入您打算猜的拳(用數(shù)字123代替)\n"<<endl;
             76                    cin.clear();
             77                    cin.sync();
             78                    continue;
             79                }
            else
             80                {
             81                    cout<<""<<i+1<<"次猜拳游戲 ";
             82                    if(t==1)
             83                        cout<<"您猜的拳是:石頭"<<endl;
             84                    else if(t==2)
             85                        cout<<"您猜的拳是:剪刀"<<endl;
             86                    else
             87                        cout<<"您猜的拳是:布"<<endl;
             88                    int n=win_or_loss(t);
             89                    if(n==0)
             90                        ++ping;
             91                    else if(n>0)
             92                        ++win;//統(tǒng)計(jì)贏的次數(shù)
             93                    else
             94                        ++loss;//統(tǒng)計(jì)輸?shù)拇螖?shù)
             95                    break;
             96                }

             97            }

             98            if(i==times-1)
             99                cout<<"您的猜拳次數(shù)已經(jīng)達(dá)到您所設(shè)定的"<<times<<"次\n"<<endl;
            100        }

            101            cout<<"請問是否還要繼續(xù)本游戲(Y/other)"<<endl;
            102            cin>>q;//在玩夠開始自己所設(shè)的次數(shù)后,如果仍然打算繼續(xù),則輸入'y'
            103    }
            while(q=='Y'||q=='y');
            104    
            105    //對整個(gè)游戲過程做一個(gè)完整統(tǒng)計(jì)
            106    sum=win+loss+ping;
            107    gailv=win/sum;
            108    cout<<"\n本次游戲您一共猜拳:"<<sum<<""<<endl;
            109    cout<<"其中一共勝利:"<<win<<""<<endl;
            110    cout<<"其中一共輸了:"<<loss<<""<<endl;
            111    cout<<"其中一共打平:"<<ping<<""<<endl;
            112    cout<<"您的勝率為:"<<gailv*100<<"%"<<endl;
            113    cout<<"您的敗率為:"<<loss/sum*100<<"%"<<endl;
            114    cout<<"您的打平的概率為:"<<(1-loss/sum-gailv)*100<<"%"<<endl;
            115    if(sum<10)
            116        cout<<"由于您猜拳的次數(shù)小于10次,不具有統(tǒng)計(jì)學(xué)意義,所以您與電腦到底誰厲害,無法評判,請大俠重新來過!\n"<<endl;
            117    else if(gailv<0.4)
            118        cout<<"您真是個(gè)菜鳥,連二進(jìn)制的電腦都比不過,笨死了!\n"<<endl;
            119    else
            120        cout<<"大俠好厲害啊,竟然贏了電腦,佩服佩服,看來我得重新寫代碼啊\n"<<endl;
            121    
            122    baoshi(the_time_2);
            123    cout<<"本次游戲您一共花費(fèi)了:"<<the_time_2-the_time_1<<"秒\n"<<endl;
            124
            125    keep_window_open();
            126    return 0;
            127}

            128
            129//游戲核心代碼,判斷輸贏
            130int win_or_loss(int t)
            131{
            132    time_t the_time;
            133    struct tm *tm_ptr;
            134    int rec_sec;
            135
            136    //電腦的猜拳最好的辦法是設(shè)定一組完全的隨機(jī)數(shù),但是一般很難設(shè)計(jì)出完全的隨機(jī)數(shù),因此想了一個(gè)很巧妙的方法,取玩游戲時(shí)的系統(tǒng)時(shí)間的秒,根據(jù)當(dāng)前的秒,電腦給出相應(yīng)猜出的拳
            137    //這樣用一種相對比較隨機(jī)的方法,即便玩游戲的人知道了隨機(jī)數(shù)的規(guī)律,也很難完全獲勝
            138    the_time=time((time_t *)0);
            139    tm_ptr=gmtime(&the_time);
            140    rec_sec=tm_ptr->tm_sec;
            141
            142
            143    int ans;
            144    //switch中主要分了三種情況,第一種是60以內(nèi)的素?cái)?shù),然后又添加了幾個(gè)其他的,湊夠20;第二種是能被3除開的,然后再添加幾個(gè)湊成20個(gè);剩下的為第三種
            145    switch(rec_sec)
            146    {
            147    case 2:case 8:case 5:case 7:case 11:case 13:case 17:case 19:case 23:case 29:case 31:case 37:case 41:case 43:case 47:case 53:case 59:case 22:case 38:case 56:
            148        cout<<"電腦游戲程序的猜的拳是:石頭"<<endl;
            149        ans=1;
            150        break;
            151    case 0:case 3:case 6:case 9:case 12:case 15:case 18:case 21:case 24:case 27:case 30:case 33:case 36:case 39:case 42:case 45:case 48:case 51:case 54:case 57:
            152        cout<<"電腦游戲程序的猜的拳是:剪子"<<endl;
            153        ans=2;
            154        break;
            155    default:
            156        cout<<"電腦游戲程序的猜的拳是:布"<<endl;
            157        ans=3;
            158        break;
            159    }

            160
            161    if(t==ans)
            162    {
            163        cout<<"您這次和電腦打了一個(gè)平手!"<<endl;
            164        return 0;
            165    }

            166    
            167    switch(t)
            168    {
            169    case 1:
            170        if(ans==2)
            171        {
            172            cout<<"恭喜您!您這次是僥幸贏了電腦!\n"<<endl;
            173            return 1;
            174        }

            175        else
            176        {
            177            cout<<"哈哈,笨蛋!輸給電腦了吧!"<<endl;
            178            return -1;
            179        }

            180        break;
            181    case 2:
            182        if(ans==3)
            183        {
            184            cout<<"恭喜您!您這次是僥幸贏了電腦\n"<<endl;
            185            return 1;
            186        }

            187        else
            188        {
            189            cout<<"哈哈,笨蛋!輸給電腦了吧!"<<endl;
            190            return -1;
            191        }

            192        break;
            193    case 3:
            194        if(ans==1)
            195        {
            196            cout<<"恭喜您!您這次是僥幸贏了電腦\n"<<endl;
            197            return 1;
            198        }

            199        else
            200        {
            201            cout<<"哈哈,笨蛋!輸給電腦了吧!"<<endl;
            202            return -1;
            203        }

            204        break;
            205    }

            206}

            207inline void keep_window_open()
            208{
            209    cin.clear();
            210    cout << "Please enter a character to exit\n";
            211    char ch;
            212    cin >> ch;
            213    return;
            214}

            215
            216inline void baoshi(time_t &timeval)
            217{
            218    (void)time(&timeval);
            219    cout<<"當(dāng)前北京時(shí)間為:"<<ctime(&timeval)<<"\n"<<endl;
            220    return;
            221}

            posted on 2012-01-13 22:30 古月 閱讀(3946) 評論(7)  編輯 收藏 引用 所屬分類: C/C++

            評論

            # re: 鄙人這輩子編寫的第一個(gè)游戲程序:猜拳! 好激動(dòng),共享下c++源代碼[未登錄] 2012-01-13 22:47 foxtail

            ....  回復(fù)  更多評論   

            # re: 鄙人這輩子編寫的第一個(gè)游戲程序:猜拳! 好激動(dòng),共享下c++源代碼 2012-01-14 07:36 Mensch88

            先鼓掌鼓勵(lì)一下
            不過我想以時(shí)間為種子用隨機(jī)函數(shù)rand()會(huì)更好些  回復(fù)  更多評論   

            # re: 鄙人這輩子編寫的第一個(gè)游戲程序:猜拳! 好激動(dòng),共享下c++源代碼 2012-01-14 09:02 right

            代碼亂,命名不規(guī)范,風(fēng)格不統(tǒng)一,邏輯太簡單,如果初學(xué)的話,也算正常,慢慢的會(huì)懂,如果不是的話,建議lz提高這些方面的修養(yǎng)  回復(fù)  更多評論   

            # re: 鄙人這輩子編寫的第一個(gè)游戲程序:猜拳! 好激動(dòng),共享下c++源代碼 2012-01-14 13:08 古月

            謝謝了,您說的那個(gè)rand()函數(shù)我還沒有接觸過,我研究下您說的思路,試試看@Mensch88
              回復(fù)  更多評論   

            # re: 鄙人這輩子編寫的第一個(gè)游戲程序:猜拳! 好激動(dòng),共享下c++源代碼 2012-01-14 13:09 古月

            非常感謝您的寶貴意見,確實(shí)有些亂,命名不太規(guī)范,以后一定注意提高,謝謝@right
              回復(fù)  更多評論   

            # re: 鄙人這輩子編寫的第一個(gè)游戲程序:猜拳! 好激動(dòng),共享下c++源代碼 2012-01-14 17:32 Zblc

            哈哈 已經(jīng)算很不錯(cuò)啦 繼續(xù)加油啊  回復(fù)  更多評論   

            # re: 鄙人這輩子編寫的第一個(gè)游戲程序:猜拳! 好激動(dòng),共享下c++源代碼 2012-01-16 20:16 BreakMind

            樓主,加油。

            寫得很不錯(cuò),我當(dāng)年連C++都搞不明白是什么東西,拿著C++當(dāng)C語言使用。  回復(fù)  更多評論   

            <2014年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿

            隨筆分類

            隨筆檔案

            文章檔案

            C++/C

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            久久99热精品| 久久精品国产精品亚洲人人| 久久精品成人免费观看97| 久久婷婷五月综合国产尤物app | 亚洲成av人片不卡无码久久| 午夜精品久久久久久久| 狠狠色综合网站久久久久久久| 国产精品99久久久精品无码| 精品人妻伦九区久久AAA片69| 精品久久久久久久久中文字幕| 中文字幕日本人妻久久久免费| 99久久国产免费福利| 国产精品久久免费| 国产精品久久一区二区三区| 东方aⅴ免费观看久久av| 精品久久久久久久国产潘金莲| 久久久精品国产Sm最大网站| 久久不见久久见免费影院www日本| 亚洲国产精品久久久久婷婷软件 | 亚洲午夜精品久久久久久人妖| 久久久久AV综合网成人 | 亚洲AV无码成人网站久久精品大| 一本大道久久香蕉成人网| 久久福利资源国产精品999| 国内精品久久国产| 麻豆精品久久久久久久99蜜桃| 亚洲欧美日韩中文久久| 久久久噜噜噜久久中文福利| 精品久久久久久国产91| 久久久久亚洲AV成人网人人网站| 欧美一级久久久久久久大| 2021国内久久精品| 久久久噜噜噜www成人网| 青青草原1769久久免费播放| 国产精品99久久久久久猫咪| 久久久久亚洲av成人无码电影| 久久夜色精品国产亚洲| 久久99国产综合精品| 久久亚洲高清观看| 青青草原综合久久大伊人| 久久久精品午夜免费不卡|