| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1004 人关注过本帖
标题:帮忙看看我这个用C语言写的程序哪些不足?
只看楼主 加入收藏
午夜小学徒
Rank: 2
等 级:论坛游民
威 望:3
帖 子:52
专家分:40
注 册:2014-7-17
结帖率:71.43%
收藏
已结贴  问题点数:20 回复次数:16 
帮忙看看我这个用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
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:20 
总的来说,就是调试问题,你没有对每一个函数和功能进行调试的习惯(看3楼就知道了,很明显你没有想到用户按的q键可以是大写,而且你的比较号写成了赋值号,根本就是没有即时测试这段代码的),是写好整个程序然后不知道哪里出问题的,自己给自己定位错误位置制造麻烦。至于第三个自己发现的问题,是代码风格没有养成。

授人以渔,不授人以鱼。
2014-09-11 20:04
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
一时用getchar(),一时用_getch(),怎能不混乱,我看你整体思路都没理清。

授人以渔,不授人以鱼。
2014-09-11 20:07
午夜小学徒
Rank: 2
等 级:论坛游民
威 望:3
帖 子:52
专家分:40
注 册:2014-7-17
收藏
得分:0 
回复 4 楼 TonyDeng
谢谢指点,第一次编写C语言程序,也可以说第一次编写,所以以后可能有了问题还会发到论坛上来!小虾会慢慢注意并养成良好编译习惯,向程序员的更高层次努力!!!
2014-09-11 20:08
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
#include "stdafx.h"
如果你不是使用“预编译头”编译选项,是不需要写这个包含头的,用这个,包含的方式就不是下面那样写。stdafx.h是把你整个程序都用到的.h都写在这个头文件中,不用在每一个.cpp中都包含一次,而且那些头一般是不用再修改的,编译器编译过一次之后,就不用再编译它们了,这样编译速度会加快,那是对大型程序有用的,须知包含一个.h头文件,可能会牵扯成千上万行代码进来,每次都编译一次,是要耗费时间的。

授人以渔,不授人以鱼。
2014-09-11 20:12
午夜小学徒
Rank: 2
等 级:论坛游民
威 望:3
帖 子:52
专家分:40
注 册:2014-7-17
收藏
得分:0 
回复 5 楼 TonyDeng
我都不好意思说,其实我没有搞懂getch() getchar() getc() getche()的不同之处,一会儿……我现在就去看看去……
2014-09-11 20:12
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用午夜小学徒在2014-9-11 20:08:51的发言:

谢谢指点,第一次编写C语言程序,也可以说第一次编写,所以以后可能有了问题还会发到论坛上来!小虾会慢慢注意并养成良好编译习惯,向程序员的更高层次努力!!!

跟用什么语言无关,这是有没有站在用户实际操作的角度来设想程序如何应对的问题,不要以为你只是程序员,不用知道用户在实际操作中会做什么、如何想的,那样写不好程序。不管用什么编程语言写程序,这些是最基本的态度和思路。

授人以渔,不授人以鱼。
2014-09-11 20:15
午夜小学徒
Rank: 2
等 级:论坛游民
威 望:3
帖 子:52
专家分:40
注 册:2014-7-17
收藏
得分:0 
回复 7 楼 TonyDeng
这个编译头#include "stdafx.h"是VS自带的,以前没有注意,就感觉理所当然的用了,也没想过去把它去掉之类的
2014-09-11 20:15
快速回复:帮忙看看我这个用C语言写的程序哪些不足?
数据加载中...
 
   



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

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