| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1004 人关注过本帖
标题:帮忙看看我这个用C语言写的程序哪些不足?
取消只看楼主 加入收藏
午夜小学徒
Rank: 2
等 级:论坛游民
威 望:3
帖 子:52
专家分:40
注 册:2014-7-17
结帖率:71.43%
收藏
已结贴  问题点数:20 回复次数:9 
帮忙看看我这个用C语言写的程序哪些不足?
小虾我用C语言写了一个小程序--赌博机,但是总是只能下一次注,而且按q键也不能退出程序!!!请各路大哥大姐指点,我使用VS2012编写的!
#include "stdafx.h"
#include "stdlib.h"
#include "time.h"
#include "conio.h"
int a , b , c, bet,BetMoney;//bet用来保存下注方式  BetMoney是赌金即所下注的元宝数量
int playerMoney = 1000,dealerMoney = 1000;//玩家和庄家的本钱
//游戏规则
void ShowTOScreen(){
    printf("                            赌博规则:\n");
    printf("*************************************************************************\n");
    printf("  闲家和庄家的赌金1000\n");
    printf("  赌注方式 :                      ,以及可以压得赌金数(1 -100)\n");
    printf(" 1、买大 ,2、 买小 ,3、买豹子、\n");
    printf(" 若玩家买大,则投掷出色子点数应大于11,若玩家掷出点数大于11,则庄家应赔给玩家2倍所压赌金。否则玩家输!应赔给庄家2倍赌金\n");
    printf("\n");
    printf(" 若玩家买小则投掷出色子点数应小于11,若玩家掷出点数小于11,则庄家照样赔给玩家2倍赌金。否则玩家输,应赔给庄家2倍赌金.\n");
    printf("\n");
    printf(" 若玩家买豹子,则投掷出色子点数应相同,若玩家投掷出豹子,则庄家必须按照闲家赌金的10倍,赔给闲家.否则玩家输,应赔给庄家10倍赌金.\n");
    printf("\n");
    printf(" 玩家可以通过按q键终止游戏,若玩家不终止,则游戏一直进行到玩家和庄家一方的赌金不够为止\n");
    printf(" 赌博规则介绍完毕!预祝:玩家玩的愉快!\n");
    printf("\n");
}
//玩家选择下注方式
int GetBet(){
    int BetType;
    printf("\n请选择下注方式:\n");
    printf("1、买大。2、买小。3、买豹子。\n");
    printf("请下注:\n");
    scanf_s("%d",&BetType);
    if (BetType == 1 ||BetType == 2 || BetType == 3)
    {
        return BetType;
    }else
    {
        printf("如果你的下注方式选错了,系统自动把你的下注方式改为第一种下注方式!!!\n");
        return 1;
    }
}
//闲家输入赌金
int GetAcount(){
    //int BetMoney;//赌金
    printf("你压多少赌金(最少10元宝,最多100元宝)?\n");
    scanf_s("%d",&BetMoney);
    if (BetMoney < 10)
    {
        BetMoney = 10;
    }
    if (BetMoney > 100)
    {
        BetMoney = 100;
    }
    return BetMoney;
}
//投掷色子
void Throw(){
    printf("欢迎体验赌博机,请按任意键!\n");
    getchar();//等待用户按键
    srand(time(0));//随机数种子,根据系统的时间time随机给3个色子1-6之间的正整数
    //kbhit()检测键盘是否输入
    while (!_kbhit())
    {
        a = rand()%6 + 1;
        b = rand()%6 + 1;
        c = rand()%6 + 1;
        system("cls");//清屏
        printf("色子转动 ……………………按键盘任意键终止!\n");
        printf("第一粒塞子 %d\n 第二粒塞子的点数:%d\n 第三粒塞子的点数:%d\n",a,b,c);
    }
}
//判断3个色子的 大,小或豹子
int Judge(int a ,int b, int c){
    if (a ==b && a == c)
    {
        return 3;
    }
    if (a + b + c > 11)
    {
        return 1;
    }
    if (a + b + c < 11)
    {
        return 2;
    }    else{
        return 0;
    }
}
//判定输赢并计算玩家和庄家的赢(输)元宝
void MoneyCount(){
    if (Judge(a,b,c) == 3 )
    {
        if (bet == 3 )
        {
            BetMoney *= 10;
            playerMoney += BetMoney;
            dealerMoney -= BetMoney;
            printf("豹子 ,你赢了,赔率10倍!你从庄家出得到%d元宝,你现在有%d元宝,庄家剩余元宝%d\n",BetMoney,playerMoney,dealerMoney);
        }else
        {
            BetMoney *= 10;
            playerMoney -= BetMoney;
            dealerMoney += BetMoney;
            printf("豹子,你输了,赔率10倍!你输了%d元宝 ,你所余元宝%d, 庄家现有元宝%d\n",BetMoney,playerMoney,dealerMoney);
        }
        printf("豹子\n");
    }else if (Judge(a,b,c)==2)
    {
        if (bet == 2 )
        {
            BetMoney *= 2;
            playerMoney += BetMoney;
            dealerMoney -= BetMoney;
            printf("小,你赢了,赔率2倍!赢得元宝%d 你现在拥有元宝%d\n",BetMoney,playerMoney);
        }else
        {
            BetMoney *= 10;
            playerMoney -= BetMoney;
            dealerMoney += BetMoney;
            printf("小,你输了,赔率2倍!你输了%d元宝,你现在拥有元宝%d,庄家现有元宝%d \n",BetMoney,playerMoney,dealerMoney);
        }
        printf("小\n");
    }else if (Judge(a,b,c) == 1)
    {if (bet == 1 )
        {
            BetMoney *= 2;
            playerMoney += BetMoney;
            dealerMoney -= BetMoney;
            printf("大,你赢了,赔率2倍!赢得元宝%d 你现在拥有元宝%d\n",BetMoney,playerMoney);
    }else
    {
            BetMoney *= 2;
            playerMoney -= BetMoney;
            dealerMoney += BetMoney;
            printf("大,你输了,赔率2倍!你输了元宝%d 你现在剩余元宝%d,庄家现有元宝%d\n",BetMoney,playerMoney,dealerMoney);
    }
        printf("大\n");
    }else
    {
        printf("平局!你和庄家打成平手,你所剩元宝%d ,庄家所剩元宝%d \n",playerMoney,dealerMoney);
    }
}
//检测玩家和庄家剩余元宝
int check(int pm,int dm){
    if (pm <= 0)
    {
        if (pm == 0)
        {
            printf("你输光了所有钱,被赶出赌场!!!\n");
        }else
        {
            printf("你输光了所有钱,并欠庄家%d元宝!!!如果你不能在三日内还清所有赌债,后果自负!!!",abs(pm));
        }
        return 0;
    }
    if (dm <= 0)
    {
        if (dm == 0)
        {
            printf("庄家输光了所有钱,不能再和你赌了!!!\n");
        }else
        {
            printf("你真厉害!!!庄家欠你%d元宝!!!如果庄家不能在三日内还清赌债,则赌场就是你的了!!!",abs(dm));
        }
        return 0;
    }
    return (int)GetBet;
}
int _tmain(int argc, _TCHAR* argv[])
{
    int checkMoney,ch;
    ShowTOScreen();
    while (true)
    {
        if (playerMoney < 10)
        {
            printf("你手中的元宝不足,不能继续玩!!!\n");
            break;
        }   
        if (dealerMoney < 10 )
        {
            printf("庄家手中的元宝不足10,不能继续陪你完了!!!\n");
            break;
        }   
        bet = GetBet();
        repeat: BetMoney = GetAcount();
            if (playerMoney < BetMoney)
                {
                    printf("你手中的钱不足以支付你所压得赌金!!!请重新选择赌金!!!谢谢合作!!!\n");
                    goto repeat;
                }
            if (dealerMoney < BetMoney)
                    {
                        printf("庄家手中的元宝不足!!!\n");
                        goto repeat;
                    }
        Throw();
        MoneyCount();
        getcher();
        checkMoney = check(playerMoney,dealerMoney);
        if (checkMoney <= 0)
        break;
        printf("请问您还继续玩吗?(退出请按Q键,继续请安其他任意键!!!)\n");   
        ch = getcher();
        if (ch == 'q')
            break;
    }
    fflush(stdin);
    getchar();
    return 0;
}
解决跳转问题了
其实这个程序还有一个警告warning“参数”:c语言编译小程序1.cpp(64): warning C4244: “参数”: 从“time_t”转换到“unsigned int”,可能丢失数据

[ 本帖最后由 午夜小学徒 于 2014-9-11 20:45 编辑 ]
搜索更多相关主题的帖子: include 赌博机 C语言 大哥 
2014-09-11 19:46
午夜小学徒
Rank: 2
等 级:论坛游民
威 望:3
帖 子:52
专家分:40
注 册:2014-7-17
收藏
得分:0 
代码有些长,麻烦各位大大了!
2014-09-11 19:48
午夜小学徒
Rank: 2
等 级:论坛游民
威 望:3
帖 子:52
专家分:40
注 册:2014-7-17
收藏
得分:0 
我自己发现的几个问题:1,只能下一次注(我的是VS2012编译)。
                      2,设置的按q键,玩家可以退出游戏,但是玩家按q键并不能退出,也就是说这段
{
        printf("请问您还继续玩吗?(退出请按Q键,继续请安其他任意键!!!)\n");   
        ch = _getch();
        if (ch = 'q')
            break;
}
没有起作用!!!
                      3,就是代码繁琐
2014-09-11 19:57
午夜小学徒
Rank: 2
等 级:论坛游民
威 望:3
帖 子:52
专家分:40
注 册:2014-7-17
收藏
得分:0 
回复 4 楼 TonyDeng
谢谢指点,第一次编写C语言程序,也可以说第一次编写,所以以后可能有了问题还会发到论坛上来!小虾会慢慢注意并养成良好编译习惯,向程序员的更高层次努力!!!
2014-09-11 20:08
午夜小学徒
Rank: 2
等 级:论坛游民
威 望:3
帖 子:52
专家分:40
注 册:2014-7-17
收藏
得分:0 
回复 5 楼 TonyDeng
我都不好意思说,其实我没有搞懂getch() getchar() getc() getche()的不同之处,一会儿……我现在就去看看去……
2014-09-11 20:12
午夜小学徒
Rank: 2
等 级:论坛游民
威 望:3
帖 子:52
专家分:40
注 册:2014-7-17
收藏
得分:0 
回复 7 楼 TonyDeng
这个编译头#include "stdafx.h"是VS自带的,以前没有注意,就感觉理所当然的用了,也没想过去把它去掉之类的
2014-09-11 20:15
午夜小学徒
Rank: 2
等 级:论坛游民
威 望:3
帖 子:52
专家分:40
注 册:2014-7-17
收藏
得分:0 
回复 9 楼 TonyDeng
恩,知道了
2014-09-11 20:16
午夜小学徒
Rank: 2
等 级:论坛游民
威 望:3
帖 子:52
专家分:40
注 册:2014-7-17
收藏
得分:0 
以下是引用TonyDeng在2014-9-11 20:17:59的发言:


写了也没坏,它其实是一个空文件,里面没有内容的。


是不是把写程序用到的头文件写到  stdafx.h 里面?
2014-09-11 20:23
午夜小学徒
Rank: 2
等 级:论坛游民
威 望:3
帖 子:52
专家分:40
注 册:2014-7-17
收藏
得分:0 
#include "stdlib.h"
#include "time.h"
#include "conio.h" 这三个头文件(以后程序用到的头文件)应该写到哪里啊?
2014-09-11 20:25
午夜小学徒
Rank: 2
等 级:论坛游民
威 望:3
帖 子:52
专家分:40
注 册:2014-7-17
收藏
得分:0 
以下是引用TonyDeng在2014-9-11 20:34:03的发言:



如果你用“预编译头”选项,就可以把这三个包含语句写到stdafx.h中,然后每个.cpp仅包含stdafx.h即可(这就是自动生成的模板都有这一行的原因)。你要明白,每个.cpp的#include指令,是把那些.h的代码全部塞进这个.cpp中再进行编译,也就是说,你写一行#include <stdio.h>,就等于把stdio.h文件中的数百行代码都放进来了,然后又不知道stdio.h里面又包含了什么.h,一串一串地……编译器编译,是傻瓜式的,你若有3个.cpp(一个实际的项目程序,一百几十个.cpp是常事),每个都包含了stdio.h,那么就塞入3份stdio.h代码,编译3次。预编译头选项,就仅编译一次,以后再不编译了。当然,有人说这是MS编译器的扩展,其他编译器未必如此,也不是什么标准,看你进入哪个生态环境而已,熟悉了以后未必能适应不支持的环境,这要自己衡量取舍。

顺便补充一下:对静态编译型语言来说,即使包含了用不到的.h,也是没有坏处的,因为编译器可以把没用到的代码剔除,不会链接到最终可执行文件中。

以前辉哥(教我cocos的老师,亦师亦友)教我,把引用的.h写到.cpp中去,以免混乱
2014-09-11 20:49
快速回复:帮忙看看我这个用C语言写的程序哪些不足?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019102 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved