您的位置:首页 > 其它

C指针原理(75)-GLIB

2014-01-26 16:18 441 查看
四、改造21点游戏 

1、引入字符串类型

GString结构包含了三个成员:保存字符串当前状态的C字符串,除了结束符的字符串长度,和为字符串当前分配的内存数量。如果字符串增加到超出分配的内存长度,GString会自动为其分配更多内存。

 

        typedef struct

        {

            gchar *str;

            gsize len;

            gsize allocated_len;

        } GString;


麦好的AI乐园博客所有内容是原创,如果转载请注明来源


http://blog.csdn.net/myhaspl/

在玩家和电脑抽数后,仅显示本次抽到的数字,需要在每次抽取后显示所有的数字,使用Gstring完成含有多个数字的字符串的动态生成。创建一个新GString的一种方式是利用g_string_new(),使用g_string_append_printf(),它将附加格式化的字符串到GString的结尾,并保持当前内容不变。

dp@dp:~/gliblearn % cat 21dian.c

#include <glib.h>

#include <stdio.h>

#include <locale.h>

//code:myhaspl@myhaspl.com

//date:2014-01-26

//未经作者书面许可,请勿用于任何用途

int main(int argc, char *argv[]){

setlocale(LC_ALL,"");

GString *man_list;

GString *comp_list;

man_list=g_string_new("玩家抽到的数字: ");

comp_list=g_string_new("电脑抽到的数字: ");

GRand *gamerand;

gchar gamename[10];

        g_print("您叫什么名字?\n");

scanf("%s",&gamename);

g_print("欢迎您,%s,这里是21点游戏\n",gamename);

setbuf(stdin,NULL);

gint key=0;

gint rndnumber;

gint man_number,comp_number;

gint man_count=0,comp_count=0;

gboolean man_end=FALSE,comp_end=FALSE;

gboolean gameover=FALSE;

gamerand = g_rand_new();

do{

if (!man_end){

g_print("%s,按Y/y键抽数字,按其它键表示不再抽数字!\n",gamename);

key=getchar();

getchar();

//玩家抽数字

if (key=='y'||key=='Y'){

rndnumber=g_rand_int_range(gamerand,1,11);

man_number=rndnumber;

man_count+=man_number;

g_string_append_printf(man_list,"%d  ",man_number);

g_print("%s,您抽到的是:%d\n",gamename,man_number);

}else

{

g_print("玩家放弃抽数!\n",comp_number);

man_end=TRUE;

}

        }

//电脑抽数字

if (comp_count<=17){

rndnumber=g_rand_int_range(gamerand,1,11);

comp_number=rndnumber;

comp_count+=comp_number;

g_string_append_printf(comp_list,"%d  ",comp_number);

g_print("电脑抽到的是:%d\n",comp_number);

}else

{

g_print("电脑放弃抽数!\n",comp_number);

comp_end=TRUE;

}

g_print("$$$$$$本轮结束,双方明细$$$$$$\n");

g_print("%s\n",man_list->str);

g_print("%s\n",comp_list->str);

if ((man_count>21 && comp_count>21)||(man_count<=21 && comp_count<=21 && man_count==comp_count && man_end &&comp_end)){

g_print("平手,电脑%d点,%s %d点\n",comp_count,gamename,man_count);

gameover=TRUE; 

}

else if ((man_count>21 && comp_count<=21)||(man_count<21 && comp_count==21)) {

g_print("电脑赢了,电脑%d点,%s %d点\n",comp_count,gamename,man_count);

gameover=TRUE; 

}

else if ((man_count<=21 && comp_count>21) ||(man_count==21 && comp_count<21)) {

g_print("玩家赢了,电脑%d点,%s %d点\n",comp_count,gamename,man_count);

gameover=TRUE; 

}

else if (man_end && comp_end){

  man_count>comp_count?g_print("玩家赢了,电脑%d点,%s %d点\n",comp_count,gamename,man_count):g_print("电脑赢了,电脑%d点,%s %d点\n",comp_count,gamename,man_count);

         gameover=TRUE; 

}

else

{

g_print("\n$$$$$$电脑%d点,%s %d点$$$$$$\n",comp_count,gamename,man_count);

}

}while(!gameover);

g_string_free(man_list,TRUE);

g_string_free(comp_list,TRUE);

g_rand_free(gamerand);

return 0;

}

 


麦好的AI乐园博客所有内容是原创,如果转载请注明来源


http://blog.csdn.net/myhaspl/

dp@dp:~/gliblearn % ./21dian

您叫什么名字?

myhaspl

欢迎您,myhaspl,这里是21点游戏

myhaspl,按Y/y键抽数字,按其它键表示不再抽数字!

y

myhaspl,您抽到的是:8

电脑抽到的是:8

$$$$$$本轮结束,双方明细$$$$$$

玩家抽到的数字: 8  

电脑抽到的数字: 8  

 

$$$$$$电脑8点,myhaspl 8点$$$$$$

myhaspl,按Y/y键抽数字,按其它键表示不再抽数字!

n

玩家放弃抽数!

电脑抽到的是:1

$$$$$$本轮结束,双方明细$$$$$$

玩家抽到的数字: 8  

电脑抽到的数字: 8  1  

 

$$$$$$电脑9点,myhaspl 8点$$$$$$

电脑抽到的是:7

$$$$$$本轮结束,双方明细$$$$$$

玩家抽到的数字: 8  

电脑抽到的数字: 8  1  7  

 

$$$$$$电脑16点,myhaspl 8点$$$$$$

电脑抽到的是:2

$$$$$$本轮结束,双方明细$$$$$$

玩家抽到的数字: 8  

电脑抽到的数字: 8  1  7  2  

 

$$$$$$电脑18点,myhaspl 8点$$$$$$

电脑放弃抽数!

$$$$$$本轮结束,双方明细$$$$$$

玩家抽到的数字: 8  

电脑抽到的数字: 8  1  7  2  

电脑赢了,电脑18点,myhaspl 8点
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: