JBTALKS.CC

标题: 请教下如何利用c语言设计一个简单的数字游戏?? [打印本页]

作者: fuiyooo    时间: 2009-4-18 04:16 PM
标题: 请教下如何利用c语言设计一个简单的数字游戏??
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int main(void){
   

    //如果选择y就开始游戏
    if(choice == 'Y'){
      
        srand(time(NULL));
        int answer =(rand()%100)+1;
        //上面两行,用意是为了产生乱数可以给玩家去猜,所以answer就是乱数,请自行运用
        
        printf("=====开始游戏=====\n");
        while(1){
             //请输入1~100的数字  
           
            //若输入0就结束游戏      
            if(){
            
            }
            //若输入小过0或大过100的话,就必须让玩家重新输入
            else if(){
                 
            }
            //若输入的答案刚好等于answer
            else if(){
                 
                 //这里要让玩家选择要不要重新玩多一次
                           
            }//若输入的数字大于答案
            else if(){
               
            }//若输入的数字小于答案
            else if(){
               
            }
   
        }      
              
    }//如果选择N就结束游戏
    else printf("good bye .....\n");
    system("pause");   
    return 0;
    }



有没有人可以帮下我啊?我不会做啊。。。。
作者: Super-Tomato    时间: 2009-4-18 05:17 PM
既然结构你都大概了解了,怎么會不知道如何開始呢??

首先你該去查阅 C 如何取得使用者所輸入的数据,然后判段是否为数字或文字,之後才開始你所定义的规则判段
作者: fuiyooo    时间: 2009-4-18 05:38 PM
标题: 回复 #2 Super-Tomato 的帖子
我是明白了,不过我要执行的时候,有点问题。。。
所以我希望你们可以帮下我咯。。。
作者: 冥    时间: 2009-4-18 06:39 PM
#define _CRT_SECURE_NO_DEPRECATE           \\当中有scanf的问题,所以用这个去弄掉scanf的warning
#include<stdio.h>
#include<stdlib.h>

int main(void)
{        char choice,ch;
        int a;
    int answer;
s3:        answer =(rand()%100)+1;
s1:
        printf(" Press Y to start Game,Press N to Quit\n");
        scanf("%c",&choice);
        switch(choice)
        {
        case 'y':printf("Start Game!\n");
s2:                        printf("enter a number 1~100,0 to Quit\n");
                        scanf("%d",&a);
                        if(a==0) return 0;
                        else if(a<=-1||a>100)goto s2;
s4:                        if(a==answer)
                        {printf("Correct!Do you want to play again?Y or N\n");
                        scanf("%c",&ch);
                                switch(ch)
                                {case 'y':goto s3;
                                case 'n':printf("Goodbye\n");break;
                                default :printf("Not available\n");goto s4;}}
                        else {printf("Wrong number!Guess Again!\n");
                        goto s2;};
        case 'n':printf("Goodbye!");break;
        default :printf("not available\n");goto s1;
        };
}
这个我自己打的...有什么问题...看看一下吧...作参考..
switch跟if的问题拿来对比...这样才会进步嘛...em0020
if的我也试过了...可以...em0020

[ 本帖最后由 冥 于 2009-4-18 06:56 PM 编辑 ]
作者: fuiyooo    时间: 2009-4-18 06:56 PM
标题: 回复 #4 冥 的帖子
em0007 老师叫我们用if来做。。。。

[ 本帖最后由 fuiyooo 于 2009-4-18 06:59 PM 编辑 ]
作者: 冥    时间: 2009-4-18 06:58 PM
#include<stdio.h>
#include<stdlib.h>

int main(void)
{        char choice,ch;
        int a;
    int answer;
s3:        answer =(rand()%100)+1;
s1:
        printf("Press Y to start Game,Press N to Quit\n");
        scanf("%c",&choice);
       
       
        if(choice=='y'){printf("Start Game!\n");
s2:                        printf("enter a number 1~100,0 to Quit\n");
                        scanf("%d",&a);
                        if(a==0) return 0;
                        else if(a<=-1||a>100)goto s2;
s4:                        if(a==answer)
                        {printf("Correct!Do you want to play again?Y or N\n");
                        scanf("%c",&ch);
                                switch(ch)
                                {case 'y':goto s3;
                                case 'n':printf("Goodbye\n");break;
                                default :printf("Not available\n");goto s4;}}
                        else {printf("Wrong number!Guess Again!\n");
                        goto s2;};}
        else {printf("Goodbye!");
        return 0;
        }
}
我把一部分改成if了...再动点脑筋...自己把switch部分改改看...-.-
作者: fuiyooo    时间: 2009-4-18 07:00 PM
标题: 回复 #6 冥 的帖子
如果不用goto这指令能做到吗?
作者: 冥    时间: 2009-4-18 07:05 PM
如果不用goto...用do while了...但没用阿...你重点是一定要用if...

[ 本帖最后由 冥 于 2009-4-18 07:10 PM 编辑 ]
作者: 冥    时间: 2009-4-18 07:06 PM
还是要用到if...不用goto也是可以
作者: JulyAngel    时间: 2009-4-18 07:11 PM
一般來說 都不鼓勵用goto
判斷最好用的就是if了
那是基本功而已 背後會越用越多
作者: 冥    时间: 2009-4-18 07:15 PM
goto自己比较容易明白...但是别人看了就有点乱...
作者: fuiyooo    时间: 2009-4-18 07:26 PM
标题: 回复 #6 冥 的帖子
刚才我试了,可以如果我输入的不是答案,你的是要我重新的在1-100里面再输入,可是老师的要求是如果输入错了,会缩短范围的哦!
例如:1-100(我输入50,可是答案是80)
然后他会要求我们在50-100里面再输入答案...直到答案被猜对!
作者: 冥    时间: 2009-4-18 07:27 PM
噢噢噢...挑战哦...哈哈,我研究看看...我也是刚开始学而已...
作者: JulyAngel    时间: 2009-4-18 07:29 PM
我也有一題想問 知道為什麼麻煩告訴我

float a = 0.1;
float b = 0.2;
float c = 0.3;

為什麼c>a+b?em0010

c的數目為什麼會大過a+b?
這樣有比較清楚嗎

[ 本帖最后由 JulyAngel 于 2009-4-18 07:39 PM 编辑 ]
作者: fuiyooo    时间: 2009-4-18 07:35 PM
标题: 回复 #14 JulyAngel 的帖子
你是想问什么啊?
我不明白。。。em0030
作者: 冥    时间: 2009-4-18 07:36 PM
a+b....不是应该等于c吗?
作者: JulyAngel    时间: 2009-4-18 07:46 PM
原帖由 于 2009-4-18 19:36 发表
a+b....不是应该等于c吗?

哈哈 看到我的第1反應
我自己判斷是 c沒有大過a+b

不過你去compile一下看看
然後用if判斷 出來的結果卻很奇怪
就是不懂什麼問題

我用的是Dev-C++ 想說看看你們的會不會同樣結果em0002
作者: 冥    时间: 2009-4-18 07:49 PM
#include<stdio.h>
#include<stdlib.h>

int main(void)
{        char choice,ch;
        int a,b,c;
    int answer;
        b=0;
        c=100;
s3:        answer =(rand()%100)+1;
s1:
        printf("Press Y to start Game,Press N to Quit\n");
        scanf("%c",&choice);
       
       
        if(choice=='y'){printf("Start Game!\n");
                        printf("enter a number 1~100,0 to Quit\n");
s2:                        scanf("%d",&a);
                        if(a==0) return 0;
                        else if(a<=-1||a>100)goto s2;
s4:                        if(a==answer)
                        {printf("Correct!Do you want to play again?Y or N\n");
                        scanf("%c",&ch);
                                switch(ch)
                                {case 'y':goto s3;
                                case 'n':printf("Goodbye\n");break;
                                default :printf("Not available\n");goto s4;}}
                        else {
                                printf("Wrong number!Guess Again!\n");
                                if(a<answer)
                                {b=a;
                                printf("enter number between %d and %d",b,c);goto s2;}
                                if(a>answer)
                                {c=a;
                                printf("enter number between %d and %d",b,c);goto s2;
                               
                                }

                       
                        };}
        else {printf("Goodbye!");
        return 0;
        }
}
fuiyoo...这样应该可以了...我修改了一点...看重点就好了

[ 本帖最后由 冥 于 2009-4-18 07:55 PM 编辑 ]
作者: 冥    时间: 2009-4-18 07:54 PM
JulyAngel ...我的也是这样...我用的是visual c++
作者: JulyAngel    时间: 2009-4-18 08:02 PM
原帖由 于 2009-4-18 19:54 发表
JulyAngel ...我的也是这样...我用的是visual c++

相信這題一定幹掉一堆人
作者: 冥    时间: 2009-4-18 08:04 PM
同感同感...上了大学以后,我要去问教授了。。。em0017
作者: Super-Tomato    时间: 2009-4-18 11:20 PM
原帖由 JulyAngel 于 2009-4-18 07:29 PM 发表
我也有一題想問 知道為什麼麻煩告訴我

float a = 0.1;
float b = 0.2;
float c = 0.3;

為什麼c>a+b?em0010

c的數目為什麼會大過a+b?
這樣有比較清楚嗎


把你的编程完整写出来吧,但但這樣不明白你的用意
作者: zechs    时间: 2009-4-18 11:50 PM
dim a as integer = 0 'a as first value
dim b as integer = 100 'b as last value
dim c as integer = 0 'c as answer
dim d as integer = 0 'd as input value

if d <= a or d => b then
        message : please input value between a to b
       
        if d = c then
                boom!!!!!!
        else if d < c then
        a = d
        else if d > c then
        b = d
        end if
       
end if

差不多是这样吧,是吗?
作者: JulyAngel    时间: 2009-4-19 12:08 AM
原帖由 Super-Tomato 于 2009-4-18 23:20 发表


把你的编程完整写出来吧,但但這樣不明白你的用意


其實很短....

例子1:
#include <iostream>
using namespace std;
int main(){
   float a = 0.1;
   float b = 0.2;
   float c = 0.3;


   if(c>a+b)cout<<"BOOM"<<endl;

system("pause");
}

輸出結果:
BOOM
press any key to continue...


例子2:
#include <iostream>
using namespace std;
int main(){
   float a = 0.1;
   float b = 0.3;
   float c = 0.4;


   if(c>a+b)cout<<"BOOM"<<endl;

system("pause");
}

輸出結果:
press any key to continue...


例子一 就是我的問題 c>a+b?為什麼?
例子二 就是我對它的認識
知道答案 請指點我em0034

[ 本帖最后由 JulyAngel 于 2009-4-19 12:13 AM 编辑 ]
作者: Super-Tomato    时间: 2009-4-19 12:29 AM
原帖由 JulyAngel 于 2009-4-19 12:08 AM 发表


其實很短....

例子1:
#include
using namespace std;
int main(){
   float a = 0.1;
   float b = 0.2;
   float c = 0.3;

   if(c>a+b)cout



你是用 Dev-C++ 的 gcc 編譯??
但我用 gcc, bcb 與 vc2008 的編譯器測試都沒這個問題啊




[ 本帖最后由 Super-Tomato 于 2009-4-19 12:47 AM 编辑 ]
作者: JulyAngel    时间: 2009-4-19 08:42 AM
原帖由 Super-Tomato 于 2009-4-19 00:29 发表



你是用 Dev-C++ 的 gcc 編譯??
但我用 gcc, bcb 與 vc2008 的編譯器測試都沒這個問題啊



我的是Dev-C++沒錯
在測試階段的時候 發現的問題
實際原因我也不了解
作者: Super-Tomato    时间: 2009-4-19 12:24 PM
原帖由 fuiyooo 于 2009-4-18 05:38 PM 发表
我是明白了,不过我要执行的时候,有点问题。。。
所以我希望你们可以帮下我咯。。。



先自己編寫出現錯誤的地方才是別人幫忙的部分, 不勞而獲的東西永遠無法變成自己的.



原帖由 JulyAngel 于 2009-4-19 08:42 AM 发表

我的是Dev-C++沒錯
在測試階段的時候 發現的問題
實際原因我也不了解



升級一下你的編譯器, 或嘗試把 Dev-C++ 改成其他的編譯器進行編譯
作者: fuiyooo    时间: 2009-4-19 10:19 PM
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int main(void)
{        char choice,ch;
        int a,b,c;
    int answer;
        b=0;
        c=100;
        srand(time(NULL));
s3:     answer =(rand()%100)+1;
s1:
        printf("Press Y to start Game,Press N to Quit\n");
        scanf("%c",&choice);
      
      
        if(choice=='y'){printf("Start Game!\n");
                        printf("enter a number 1~100,0 to Quit\n");
s2:                        scanf("%d",&a);
                           if (a<b){
                           printf("enter number between %d and %d:\n",b,c);                           
                           goto s2;
                           }
                           else if(a>c){
                           printf("enter number between %d and %d:\n",b,c);
                           goto s2;                           
                           }
                        if(a==0)
                        return 0;
                        else if(a<=-1||a>100){
                             printf("Cant enter a number less than 0 and more than 100....");
                             goto s2;
                        
                                
                                }
                        else {
                                printf("Wrong number!Guess Again!\n");
                                if(a==answer)
                                {a==answer;
                                printf("Correct!Do you want to play again?Y or N\n");
                                scanf("%c",&ch);
                                if(ch=='Y')
                                goto s3;
                                else if(ch=='N'){
                                printf("Goodbye\n");
                                }
                                
                                }
                                else if(a<answer)
                                {b=a;
                                printf("enter number between %d and %d:\n",b,c);
                                goto s2;
                                }
                                else if(a>answer)
                                {c=a;
                                printf("enter number between %d and %d:\n",b,c);
                                goto s2;                              
                                }
                              
                        }
                       
                        }
        else {printf("Goodbye!");
        return 0;
        }
}



想请问下,为什么当我执行的时候,答案对了就直接关闭程序的??
请问我哪里出现问题了啊?

[ 本帖最后由 fuiyooo 于 2009-4-19 10:21 PM 编辑 ]
作者: Super-Tomato    时间: 2009-4-20 05:36 AM
原帖由 fuiyooo 于 2009-4-19 10:19 PM 发表
#include
#include
#include

int main(void)
{        char choice,ch;
        int a,b,c;
    int answer;
        b=0;
        c=100;
        srand(time(NULL));
s3:     answer =(rand()%10 ...


厄.... 拿了網友的程式修改卻不明白自己改了哪些??
編程基礎學習有很大的問題哦, 建議拿回講義再複習吧
作者: 冥    时间: 2009-4-20 06:19 PM
自己修改一下...顺序排好....=.=
首先你的{}用的很乱...刚开始都会的...
排法也不明确...
应该是
1)选Y or N
2)然后是比较a的值...零,<-1,>100,和在他们之间
3)当然是a==answer时,会goto哪里
4)再来就是a!=answer时...以及让b=a,c=a的地方...

你把a==answer的次序放入了a!=answer及b=a,c=a之间...这样会造成混乱...

[ 本帖最后由 冥 于 2009-4-20 07:22 PM 编辑 ]
作者: fuiyooo    时间: 2009-4-20 06:48 PM
我的天啊。。。。今天拿去问老师的时候,老师说用goto来做的程序都是烂程序。。。叫我用if else while来重新做过。。。奶奶的
作者: 冥    时间: 2009-4-20 07:56 PM
...=.=那就用while来做咯...人生就是这样的咯...我还在研究中...我也不懂为什么你的会那样...用while也不错...那样脑筋会加强...加油
作者: 冥    时间: 2009-4-20 08:32 PM
研究到了!!...很简单...那就是...
不要让ch=='y'...而是ch='y'....=.=
作者: fuiyooo    时间: 2009-4-20 09:10 PM
我去试过了,可是还是不能哦。。。
如果可以的话,你可以给你写好的给我看吗?
作者: JulyAngel    时间: 2009-4-20 09:28 PM
原帖由 fuiyooo 于 2009-4-20 21:10 发表
我去试过了,可是还是不能哦。。。
如果可以的话,你可以给你写好的给我看吗?

你的學校也讓他幫你上不是更好 =.=
作者: fuiyooo    时间: 2009-4-20 09:33 PM
标题: 回复 #35 JulyAngel 的帖子
=,=我又不是说一直叫他帮我...只是我有地方弄不懂而已...
作者: Super-Tomato    时间: 2009-4-20 11:12 PM
原帖由 fuiyooo 于 2009-4-20 09:33 PM 发表
=,=我又不是说一直叫他帮我...只是我有地方弄不懂而已...



先把你的程式改成 while 写法再来考虑你後面的問題, 別人已經開頭给你了,修改成 while 應該不是难事
改好之後才把你的 codes 贴出来,不然你的基础是不能从练习中學好
作者: 冥    时间: 2009-4-21 11:50 AM
用while的我弄好了...还有问题吗?
作者: JulyAngel    时间: 2009-4-30 11:14 PM
原帖由 于 2009-4-21 11:50 发表
用while的我弄好了...还有问题吗?

如果你是要c++題目的話
網上很多 作到吐 都不成問題

題目一堆 沒有答案 建議看看就好
http://zerojudge.tw/

這個比較好
http://www.math.ncu.edu.tw/~ziyou/c++/
作者: 冥    时间: 2009-5-2 06:08 PM
谢拉...哈哈...反正我也刚开始学...就...学到吐吧。。。
作者: duo8668    时间: 2009-5-3 09:12 PM
while 时候,放个 control variable , 比如 while(!end) , by default  end 是 false。当得到要的答案之后再将end设定回true。除了boolean也可以用int end = 0; while( int!=0) { }

OOPG主要是 control 再 control。 作任何东西都是要想 “ 控制“

PS: 我也在学着一大堆的怪怪语言( JSP,CSS,Java,VB.NET,HTML) 急需C# 和 C++老师。。。谁要教我呢?

[ 本帖最后由 duo8668 于 2009-5-3 09:16 PM 编辑 ]




欢迎光临 JBTALKS.CC (https://jbtalks.my/) Powered by Discuz! X2.5