源程序是從網上看到的,
geek_monkey于2015年3月3日修改了bug(輸入字符非石頭剪刀布都算是玩家贏)
編譯環境為VC++6.0
增加“上帝模式”和數據統計,純屬娛樂。
我是C語言初學者,輕噴
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int exist_in(char *arr1[][2], char *arr2[], int length);//勝負判斷函數
void nextround (void);//本輪結束后的處理輪函數
enum {QUIT,OK} status;//標志位,QUIT=0,OK=1
int vcnt = 0,dcnt = 0,tcnt = 0;//數據統計
int main(void)
{
int i = 0, length;
time_t t;
status = OK;
char *person = (char *) malloc(100);//動態內存分配
char *computer = (char *) malloc(100);
char *computer_person[2];
char *guess_arr[] = {"石頭", "剪刀", "布"};
char *win[3][2] = {{"布", "石頭"}, {"石頭", "剪刀"}, {"剪刀", "布"}};
length = (int)sizeof(win)/(int)sizeof(win[0]);//此例中length=3
while (status == OK)//標志位1,執行死循環
{
srand((unsigned) time(&t));
i = rand() % 3 ;//srand和rand配合產生隨機數
computer = guess_arr[i];//將隨機數轉換為石頭剪刀或者布的字符串
computer_person[0] = computer;//將計算機的出拳結果放入*computer_person
do{
printf("請輸入 剪刀 石頭 布:/n");
scanf("%s",person);
if (strcmp(person,"god") == 0)//上帝模式,實現可看到電腦出拳結果
{
printf("*********************************/n");
printf("上帝你好,電腦本局的出的是 : %s /n",computer);
printf("*********************************/n");
continue;
}
else
printf("你輸入的是:%s/n", person);//下一行用于判斷用戶的輸入是否為石頭剪刀布
if ((strcmp(person,"石頭") == 0 )||(strcmp(person,"剪刀") == 0 )||(strcmp(person,"布") == 0 ))
break;//結果為石頭剪刀布之一,跳出循環。
else
printf("請檢查你的輸入是否為石頭剪刀或者布: /n");
}while(1);
computer_person[1] = person;
tcnt++;
if (strcmp(computer, person) == 0 )
{
printf("平手!/n/n");
}
else if (exist_in(win, computer_person, length))
{
printf("電腦獲勝/n/n");
dcnt++;
}
else
{
printf("玩家獲勝/n/n");
vcnt++;
nextround();
}
}
person = NULL;
computer = NULL;
free(person);
free(computer);
return 0;
}
/**********************************************
exist_in函數用于判斷是否是電腦獲勝,length為3,比較3次,arr1和arr2中字符串的
順序即可判斷出電腦是否獲勝。
*********************************************/
int exist_in(char *arr1[][2], char *arr2[], int length)
{
int i;
for (i = 0; i < length; i++)
{
if (strcmp(arr1[i][0], arr2[0]) == 0 && strcmp(arr1[i][1], arr2[1]) == 0)
{
return 1;
}
}
return 0;
}
void nextround (void)
{
int m = 0;
printf("請輸入指令:1退出,2繼續,3數據總結/n");
scanf ("%d",&m);
switch (m)
{
case 1:
status = QUIT;
break;
case 2:
printf("新的一局開始/n");
break;
case 3:
printf("您的勝場數是%d,敗場數是%d,總場數是%d/n",vcnt,dcnt,tcnt);
status = QUIT;
break;
default:
printf("輸入錯誤退出");
status = QUIT;
break;
}
}
以上就是使用vc++實現的石頭剪刀布程序的全部代碼了,希望對大家學習VC++能夠有所幫助。