程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C指針原理(75)-GLIB

C指針原理(75)-GLIB

編輯:關於C語言

四、改造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

#include

#include

//code:[email protected]

//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點

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved