⑴ 求c語言猜拳游戲代碼
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
char gamer; // 玩家出拳
int computer; // 電腦出拳
int result; // 比賽結果
// 為了避免玩一次游戲就退出程序,可以將代碼放在循環中
while (1){
printf("這是一個猜拳的小游戲,請輸入你要出的拳頭:\n");
printf("A:剪刀\nB:石頭\nC:布\nD:不玩了\n");
scanf("%c%*c",&gamer);
switch (gamer){
case 65: //A
case 97: //a
gamer=4;
break;
case 66: //B
case 98: //b
gamer=7;
break;
case 67: //C
case 99: //c
gamer=10;
break;
case 68: //D
case 100: //d
return 0;
default:
printf("你的選擇為 %c 選擇錯誤,退出...\n",gamer);
getchar();
system("cls"); // 清屏
return 0;
break;
}
srand((unsigned)time(NULL)); // 隨機數種子
computer=rand()%3; // 產生隨機數並取余,得到電腦出拳
result=(int)gamer+computer; // gamer 為 char 類型,數學運算時要強制轉換類型
printf("電腦出了");
switch (computer)
{
case 0:printf("剪刀\n");break; //4 1
case 1:printf("石頭\n");break; //7 2
case 2:printf("布\n");break; //10 3
}
printf("你出了");
switch (gamer)
{
case 4:printf("剪刀\n");break;
case 7:printf("石頭\n");break;
case 10:printf("布\n");break;
}
if (result==6||result==7||result==11) printf("你贏了!");
else if (result==5||result==9||result==10) printf("電腦贏了!");
else printf("平手");
system("pause>nul&&cls"); // 暫停並清屏
}
return 0;
}
⑵ 求幫忙用C語言完成一個猜拳游俠
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
intmain(){
chartype[][5]={"剪刀","石頭","布"};
intcomputer,you;
intwin=0,lose=0,equal=0;
srand((unsigned)time(NULL));
computer=rand()%3+1;
printf("電腦已出來了,該你啦 ");
printf("1、剪刀2、石頭3、布0、游戲結束 ");
printf("請出拳:");
while(1){
scanf("%d",&you);
if(you==0)break;
if(you<1||you>3){
printf("無效,重來:");
continue;
}
printf(" 你:《%s》,電腦:《%s》 ",type[you-1],type[computer-1]);
if(computer==1){
if(you==1){printf(" 平手,旗鼓相當啊! ");++equal;}
elseif(you==2){printf("a你贏,厲害! ");++win; }
else{printf("你輸,別氣餒! ");++lose;}
}
elseif(computer==2){
if(you==1){printf("你輸,別氣餒! ");++lose;}
elseif(you==2){printf("平手,旗鼓相當啊! ");++equal;}
else{printf("a你贏,厲害! ");++win;}
}
else{
if(you==1){printf("a你贏,厲害! ");++win;}
elseif(you==2){printf("你輸,別氣餒! ");++lose;}
else{printf("平手,旗鼓相當啊! ");++equal;}
}
printf(" ");
computer=rand()%3+1;
printf("電腦已出來了,該你啦 ");
printf("1、剪刀2、石頭3、布0、游戲結束 ");
printf("請出拳:");
}
printf("贏:%d,輸:%d,平:%d ",win,lose,equal);
return0;
}
⑶ 求幫忙寫一個C語言的猜拳小游戲
import java.util.Scanner;
public class aaa{
public static void main(String[] args){
int count1 = 0;
int count2 = 0;
String dnc = "";
String nic = "";
while(true){
int dn = (int)(Math.random()*3+1);
int ni = 0;
while(true){
System.out.println("請輸入1-3的數字");
Scanner s1 = new Scanner(System.in);
ni = s1.nextInt();
if(ni>=1 && ni<=3){
break;
}
}
if(ni==1){
nic = "石頭";
}else if(ni==2){
nic = "剪刀";
}else{
nic = "布";
}
if(dn==1){
dnc = "石頭";
}else if(dn==2){
dnc = "剪刀";
}else{
dnc = "布";
}
if(dn==1 && ni==2 || dn==2 && ni==3 || dn==3 && ni==1){
System.out.println("電腦贏了1次!電腦出:"+dnc+",你出:"+nic+"");
count1++;
}else if(dn==ni){
System.out.println("平局!電腦出:"+dnc+",你出:"+nic+"");
}else{
System.out.println("你贏了1次!電腦出:"+dnc+",你出:"+nic+"");
count2++;
}
if(count1==2){
System.out.println("三局兩勝,電腦贏了!");
break;
}else if(count2==2){
System.out.println("三局兩勝,你贏了!");
break;
}
}
}
}
這個是個Java源代碼 是Java文件 在DOS命令框運行 至於C語言不了解 但是C語言和Java語言基本上相似,所以寫了這段代碼 希望可以幫到你
⑷ C語言編寫三局兩勝的猜拳游戲編程
/*假設有A和B進行猜拳
'x'表示剪刀,'y'表示石頭,'z'表示布
規則如下:
1、 石頭 > 剪刀
2、 布 > 石頭
3、 剪刀> 布
*/
#include <stdio.h>
#define WIN 1
#define LOSE -1
#define EQUAL 0
/*比賽規則函數*/
int game_rule(char a,char b)
{
switch(a)
case 'x':
{
switch(b)
case 'x':return EQUAL;
case 'y':return LOSE;
case 'z':return WIN;
}
case 'y':
{
switch(b)
case 'x':return WIN;
case 'y':return EQUAL;
case 'z':return LOSE;
}
case 'z':
{
switch(b)
case 'x':return LOSE;
case 'y':return WIN;
case 'z':return EQUAL;
}
}
/* main function*/
void main(void)
{
int ans;
int a = b = 0;
char A;
char B;
do
{
prinf("please input A:\n");
scanf("%c",&A);
getchar();
prinf("please input B:\n");
scanf("%c",&B);
getchar();
//有效性檢查請自己加上
ans = game_rule(A,B);
if(ans==WIN)
{
a++;
prinf("A贏了%d局\n",a);
}
else if(ans==LOSE)
{
b++;
prinf("A贏了%d局\n",b);
}
if((a==2)||(b==2))
{
prinf("game over");
break;
}
}while(1);
}
⑸ 怎樣用C語言編寫一個猜拳游戲
/*至摟主:本游戲系統可支持多個用戶游戲,一次只能登錄一個用戶,運行此程序會生成一個文件來存儲用戶信息,本程序允許承載的用戶個數為1000個,為使游戲更有趣味,程序特意為不同的玩家分數設計了不同的等級,程序初始化時,會生成一個只含有5個系統玩家的文件。游戲過程中,文件會不斷刷新,如果玩家要刪除一切曾經的游戲記錄,只需將存儲文件刪除,存儲記錄的文件名為'sunyi',如果摟主想與我們聯系,請加QQ好友865363864。(加好友時請摟主註明身份)。
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//#define NULL 0
/**************************************************************************************************************************/
struct computer //定義系統玩家結構體
{
char player[30];
int score;
int times;
int time;
}cpt[1000]={"player1",100,1,1,"player2",100,1,1,"player3",100,1,1,"player4",100,1,1,"player5",100,1,1,};
FILE *in; //生成記錄玩家信息的文件的指針
int number,rool; //rool:玩家所在數組位置的角標.number:數組元素的個數.
/****************************************************************************************************************************/
int h() //生成一個隨機數(1,2或3);
{
int k,n;
n=rand()%3;
return n+1;
}
/****************************************************************************************************************************/
int str_to_num(char a[]) //引入函數str_to_num:使字元串(string)轉化為整數數形式(int)!
{
int i=strlen(a)-1,num=0,time=1;
for(;i>=0;i--)
{
num=num+(a[i]-'0')*time;
time=time*10;
}
return(num);
}
/*****************************************************************************************************************************/
void b(int n)
{
switch((int)(n/20))
{
case(0):printf("等級:江湖渣子");break;
case(1):
case(2):printf("等級:初入江湖");break;
case(3):
case(4):
case(5):printf("等級:江湖浪子");break;
case(6):
case(7):
case(8):
case(9):printf("等級:江湖俠客");break;
case(10):
case(11):
case(12):
case(13):
case(14):
case(15):
case(16):
case(17):
case(18):
case(19):printf("等級:一派掌門");break;
default:
{
switch((int)(n/1000))
{
case(0):printf("等級:武林盟主");break;
case(1):
case(2):
case(3):
case(4):printf("等級:江湖奇俠");break;
case(5):
case(6):
case(7):
case(8):
case(9):printf("等級:孤獨求敗");break;
default:printf("等級:不死之身");break;
}
}
}
}
/*****************************************************************************************************************************/
int readfile(void) //讀文件
{
int i,number=5;
if((in=fopen("sunyi.txt","rb"))!=NULL)
{
fread(&number,sizeof(int),1,in);
for(i=0;i<number;i++)
{
fread(&cpt[i],sizeof(struct computer),1,in);
}
fclose(in);
}
return(number);
}
/******************************************************************************************************************************/
void writefile() //寫文件
{
int i;
in=fopen("sunyi.txt","wb");
fwrite(&number,sizeof(int),1,in);
for(i=0;i<number;i++)
{
fwrite(&cpt[i],sizeof(struct computer),1,in);
}
fclose(in);
}
/*******************************************************************************************************************************/
void rule() //規則函數
{
printf(" 猜拳游戲\n");
printf("規則:\n");
printf(" 輸入「N」或「n」查看積分,第一次游戲時,會免費贈送玩家100枚金幣,每局游戲都會");
printf("提示您輸入押金,押金必須大於1枚金幣!(含1枚),提示游戲開始後,輸入一個1~3");
printf("之間的值;1表示石頭,2表示剪刀,3表示布。同時,系統也將出拳,按照通俗規則,贏者");
printf("將得到押金,否則扣除,當積分小於5分時,您有五次機會得到系統免費贈送的30分,");
printf("當玩家金幣數為零時(又用完5次得到30金幣的機會), 系統將提示玩家游戲結束。並刪");
printf("除用戶。\n");
printf(" #本系統會自動生成5個系統玩家輪流與您游戲,游戲前,玩家需要登錄來調出自己");
printf("的游戲記錄,如果是第一次游戲,請輸入「register」,再輸入新用戶名注冊,如果以前");
printf("進行過游戲,請輸入「entry」再輸入「用戶名」登錄.\n(註:本系統允許存儲本記錄多個用戶的信息。)\n\n");
}
/*********************************************************************************************************************************/
int registe() //開始游戲前的登錄和注冊.
{
char ch[30];
int i;
loop4:
printf("\n第一次玩游戲?請輸入「register」注冊!\n登錄?請輸入「entry」登錄\n");
loop3:
scanf("%s",ch);
if(strcmp("register",ch)==0)
{
loop2:
printf("請輸入新用戶名:(長度小於30個字元)");
scanf("%s",ch);
for(i=5;i<number;i++)
{
if(strcmp(cpt[i].player,ch)==0)
{
printf("這個用戶已被注冊過!注冊失敗!請重新注冊!\n");
goto loop2;
}
}
strcpy(cpt[number].player,ch);
cpt[number].score=100;
cpt[number].time=cpt[number].times=1;
number+=1;
writefile();
printf("注冊成功!請登錄並在您的用戶下進行游戲!:");
goto loop4;
}
else if(strcmp("entry",ch)==0)
{
printf("請輸入用戶名登錄:");
scanf("%s",ch);
for(i=5;i<number;i++)
{
if(strcmp(cpt[i].player,ch)==0)
{
printf("登錄成功!\n");
printf("您將在您的用戶下進行游戲。!");
break;
}
}
if(i==number)
{
printf("輸入錯誤或沒有注冊或該用戶由於輸光金幣已被系統刪除!\n請重新輸入用戶名登錄!");
goto loop4;
}
}
else
{
printf("您輸入的不是「register」也不是「entry」,系統無法執行您的命令,請重新輸入:\n");
goto loop3;
}
return(i);
}
/*********************************************************************************************************************************/
void game() //游戲和查詢的主體函數
{
int o,p;
char a[10],wether[1];
if(cpt[rool].time==1)printf("本局游戲系統將免費贈予您100枚金幣。\n");
if(cpt[rool].score<5&&cpt[rool].times<=5)
{
if(cpt[rool].times<5)
{
printf("您的積分已少於5分,系統第%d次贈送你30枚金幣\n",cpt[rool].times);
}
else
{
printf("您的積分已少於5分,系統最後一次贈送你30枚金幣!\n");
}
cpt[rool].score+=30;
cpt[rool].times+=1;
game();
}
if(cpt[rool].score==0)
{
int q;
printf("您不能在沒有積分的狀態下游戲!你的用戶將被刪除,如果您還想繼續游戲,請重新申請用戶\nGAME OVER!\n");
for(q=rool;q<number-1;q++)
{
strcpy(cpt[q].player,cpt[q+1].player);
cpt[q].time=cpt[q+1].time;
cpt[q].times=cpt[q+1].times;
cpt[q].score=cpt[q+1].score;
}
number-=1;
writefile();
return;
}
else
{
printf("是否繼續游戲,輸入『y』或『Y』繼續游戲\n");
scanf("%s",wether);
if(strcmp("y",wether)!=0 && strcmp("Y",wether)!=0)
{
printf("GAME STOP");
return;
}
else
{
loop1:
printf("請輸入你對本局游戲的押金或輸入'N'或『n』查詢積分排名\n");
loop5:
scanf("%s",a);
/****************************************************************************************************************************************************/
if(a[0]=='n'||a[0]=='N') //查尋排名
{
int i[5]={-1,-1,-1,-1,-1},j,k,d=0,e=0,line=-1;
for(k=1;k<=5;k++)
{
for(d=0;d<5;d++)
{
if(d!=i[0]&&d!=i[1]&&d!=i[2]&&d!=i[3]&&d!=i[4])break;
}
for(j=0;j<number;j++)
{
if(cpt[j].score>=cpt[d].score&&j!=i[0]&&j!=i[1]&&j!=i[2]&&j!=i[3]&&j!=i[4])d=j;
}
i[k-1]=d;
if(d==rool)
{
line=k;
}
printf("\n玩家:%10s,金幣數:%4d,",cpt[d].player,cpt[d].score);
b(cpt[d].score);
}
if(line!=-1)
{
printf("\n\n您目前的積分為:%d,\n排名為:%d,\n",cpt[rool].score,line);
b(cpt[rool].score);
printf("\n\n");
}
else
{
printf("\n\n您目前的積分為:%d,\n沒有進入前5名\n",cpt[rool].score);
b(cpt[rool].score);
printf("\n\n");
}
game();
}
/*****************************************************************************************************************************************************/
else //玩游戲
{
int g=0,le=strlen(a);
for(;g<le;g++)
{
if(!(a[g]>='0'&&a[g]<='9'))
{
printf("你輸入了游戲系統無法識別的字元,請重新輸入:");
break;
}
}
if(g<le)
{
goto loop5;
}
int money=str_to_num(a);
if(money==0)
{
printf("押金不能為『0』,請重新輸入:");
goto loop5;
}
if(money<0)
{
printf("押金不能為負數,請重新輸入:");
goto loop5;
}
printf("和您進行本輪游戲的是系統玩家player%d。\n",(cpt[rool].time-1)%5+1);
if(cpt[(cpt[rool].time-1)%5].score<5)
{
cpt[(cpt[rool].time-1)%5].score+=50;
printf("你的對手的金幣小於5個,系統贈送你的對手50枚金幣\n");
}
printf("您設定的押金為%d\n",money);
if(money>cpt[rool].score)
{
printf("抱歉,您的金幣不足!請重新輸入!\n");
goto loop1;
}
if(money>cpt[(cpt[rool].time-1)%5].score)
{
printf("抱歉,您的對手金幣不足!請重新輸入!\n");
goto loop1;
}
if(1>0)
{
printf("游戲開始,請出拳!(1表示石頭,2表示剪刀,3表示布)");
scanf("%d",&o);
p=h();
switch(o)
{
case 1:
{
printf("玩家出拳:石頭\n");
break;
}
case 2:
{
printf("玩家出拳:剪子\n");
break;
}
case 3:
{
printf("玩家出拳:布\n");
break;
}
}
switch(p)
{
case 1:
{
printf("系統出拳:石頭\n");
break;
}
case 2:
{
printf("系統出拳:剪子\n");
break;
}
case 3:
{
printf("系統出拳:布\n");
break;
}
}
switch(o-p)
{
case 0 :
{
printf("平局!系統將不改變你的金幣數量,你的余額為:%d\n",cpt[rool].score);
break;
}
case 1 :
case -2:
{
printf("你輸了,系統將扣除你%d個金幣,你的余額為:%d\n",money,cpt[rool].score-money);
cpt[rool].score-=money;
cpt[(cpt[rool].time-1)%5].score=cpt[(cpt[rool].time-1)%5].score+money;
break;
}
case -1:
case 2 :
{
printf("你贏了,系統將給予你%d個金幣,你的余額為:%d\n",money,cpt[rool].score+money);
cpt[rool].score+=money;
cpt[(cpt[rool].time-1)%5].score=cpt[(cpt[rool].time-1)%5].score-money;
break;
}
}
cpt[rool].time+=1;
writefile();
}
game();
}
}
}
}
main() //主函數
{
srand( (unsigned)time(0) );
number=readfile();
rule();
rool=registe();
game();
}
⑹ c語言問題 猜拳游戲
整體還是很好的。
問題在這里:
「scanf("%c,%C",&player1,&player2); 」這一句,第二個%c大寫了,改一下。
scanf的實質是將鍵盤輸入字元存入聲明字元變數時開辟的一段存儲區域。第一局運行正常,而第二局往後你只是單純的想覆蓋輸入,這是不可以的——因為你在上一次使用scanf後沒有清空輸入緩存, 這樣再次使用scanf的時候函數就會認為你已經輸入過了。
改進只需要在scanf之前加上fflush(stdin)清空輸入緩存。
如圖:
希望幫上忙。
⑺ 用C語言編寫三局兩勝的猜拳游戲,怎麼編寫
隨機種子產生pc的隨機出拳
srand(time(0));
int pc = rand()%3; //0, 1, 2 石頭剪子布
屏幕輸入自己的結果。
scanf(" %d", &var);
一個負責比較的代碼塊,很簡單的邏輯處理。
一個最多執行三次的循環。
兩個負責記錄勝負次數的變數,針對單一角色,兩勝或者兩負,都會結束游戲。
⑻ 用C語言編寫一個有趣的猜拳游戲
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#define maxn 10001
char p1[]="rock";
char p2[]="scissors";
char p3[]="cloth";
char *h[4];
void init(void)
{
h[1]=p1;
h[2]=p2;
h[3]=p3;
}
void begin(void)
{
char your[maxn];
long com;
char p[maxn];
srand(time(NULL));
for(;;)
{
printf("input your order ?( 1:rock 2:scissors 3:cloth )\n");
scanf("%s",your);
com=strlen(your);
if( your[0]>'3' || your[0]<'1' || com!=1)
{
printf("wrong order! please choose in(1~3);\n");
getchar();
continue;
}
printf("your order is %s!\n",h[your[0]-'0']);
getchar();
getchar();
com=rand()%3+1;
printf("The computer's order is %s!\n",h[com]);
getchar();
switch(com-your[0]+'0')
{
case 0:printf("draw game!\n");break;
case 1:
case -2:
printf("You wins!\n");break;
case -1:
case 2:
printf("The computer wins!\n");break;
}
com=1;
for(;com==1;)
{
printf("continue?(Y/N)\n");
scanf("%s",p);
com=0;
switch(p[0])
{
case 'Y':break;
case 'N':
printf("press any key to continue.\n");getchar();getchar();return ;
default:
printf("wrong order!\n");com=1;break;
}
}
}
}
main(void)
{
init();
begin();
return 0;
}
⑼ 求C語言猜拳游戲代碼
DOS模式下的(文字游戲):
#define SHITOU 0
#define JIANDAO 1
#define BU 2
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main()
{
int x,y;
srand ((unsigned)time(NULL));
x = rand() % 3; //隨機生成0、1、2
printf ("該你出:0-石頭,1-剪刀,2-布\n");
scanf ("%d", &y);
switch (x){
case SHITOU:
switch (y){
case SHITOU:
printf("電腦-石頭,玩家-石頭,平\n");
break;
case JIANDAO:
printf("電腦-石頭,玩家-剪刀,電腦贏\n");
break;
case BU:
printf("電腦-石頭,玩家-布,玩家贏\n");
break;
}
break;
case JIANDAO:
switch (y){
case SHITOU:
printf("電腦-剪刀,玩家-石頭,玩家贏\n");
break;
case JIANDAO:
printf("電腦-剪刀,玩家-剪刀,平\n");
break;
case BU:
printf("電腦-剪刀,玩家-布,電腦贏\n");
break;
}
break;
case BU:
switch (y){
case SHITOU:
printf("電腦-布,玩家-石頭,電腦贏\n");
break;
case JIANDAO:
printf("電腦-布,玩家-剪刀,玩家贏\n");
break;
case BU:
printf("電腦-布,玩家-布,平\n");
break;
}
break;
}
return 0;
}
WINDOWS模式下的,用MFC寫成(可視,但我不會畫那些圖案,只好用文字代替):
(PRS.h)
#define SHITOU 0
#define JIANDAO 1
#define BU 2
class CMyApp: public CWinApp
{
public:
virtual BOOL InitInstance ();
};
class CMainWindow: public CFrameWnd
{
protected:
int m_nPlayer;
int m_nComputer;
int m_nWinner;
static CRect m_Buttons[3];
static CRect m_ViewPart[2];
static CRect m_Text[2];
public:
CMainWindow ();
protected:
int GetIndex(CPoint& point);
void Judge ();
void ComputerTurn();
void DrawGameText (CDC *pDC, int pos);
void DrawButton (CDC *pDC);
void DrawTittle (CDC *pDC);
protected:
afx_msg void OnPaint ();
afx_msg void OnLButtonDown (UINT nFlags, CPoint point);
DECLARE_MESSAGE_MAP()
};
(PRS.cpp)
#include <afxwin.h>
#include <stdlib.h>
#include <time.h>
#include "PRS.h"
CMyApp theApp;
BOOL CMyApp::InitInstance ()
{
m_pMainWnd = new CMainWindow;
m_pMainWnd->ShowWindow (m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
BEGIN_MESSAGE_MAP (CMainWindow, CFrameWnd)
ON_WM_PAINT ()
ON_WM_LBUTTONDOWN ()
END_MESSAGE_MAP ()
CRect CMainWindow::m_Buttons[3] =
{
CRect (0, 540, 200, 600),
CRect (200, 540, 400, 600),
CRect (400, 540, 600, 600)
};
CRect CMainWindow::m_ViewPart[2] =
{
CRect (0, 200, 300, 540),
CRect (300, 200, 600, 540)
};
CRect CMainWindow::m_Text[2] =
{
CRect (0, 0, 300, 200),
CRect (300, 0, 600, 200)
};
CMainWindow::CMainWindow ()
{
CString strWnd = AfxRegisterWndClass (
CS_HREDRAW | CS_VREDRAW,
AfxGetApp () -> LoadStandardCursor (IDC_ARROW),
(HBRUSH)(COLOR_3DFACE + 1),
AfxGetApp () -> LoadStandardIcon (IDI_WINLOGO)
);
CreateEx (0, strWnd, _T("猜拳"),
WS_OVERLAPPED | WS_SYSMENU |
WS_CAPTION | WS_MINIMIZEBOX,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL);
CRect rect (0, 0, 600, 600);
CalcWindowRect (&rect);
SetWindowPos(NULL, 0, 0, rect.Width(), rect.Height(),
SWP_NOZORDER | SWP_NOMOVE | SWP_NOREDRAW);
}
void CMainWindow::OnPaint()
{
CPaintDC dc(this);
DrawTittle(&dc);
DrawButton(&dc);
CPen pen(PS_SOLID, 5, RGB(0, 255, 255));
CPen* pOldPen = dc.SelectObject (&pen);
dc.MoveTo (300, 200);
dc.LineTo (300, 480);
dc.SelectObject (pOldPen);
}
void CMainWindow::OnLButtonDown(UINT nFlags, CPoint point)
{
int i;
i = GetIndex(point);
if (i == -1)
return;
switch (i){
case SHITOU:
m_nPlayer = SHITOU;
break;
case JIANDAO:
m_nPlayer = JIANDAO;
break;
case BU:
m_nPlayer = BU;
break;
}
ComputerTurn();
Judge();
}
void CMainWindow::DrawTittle(CDC *pDC)
{
CFont font;
font.CreatePointFont (300, _T("黑體"));
pDC->SetBkMode(TRANSPARENT);
CFont* pOldFont = pDC->SelectObject (&font);
pDC->DrawText (_T("電腦"), -1, &m_Text[0], DT_CENTER | DT_SINGLELINE | DT_VCENTER);
pDC->DrawText (_T("玩家"), -1, &m_Text[1], DT_CENTER | DT_SINGLELINE | DT_VCENTER);
pDC->SelectObject (pOldFont);
}
void CMainWindow::DrawButton(CDC *pDC)
{
CBrush brushes[3];
brushes[0].CreateSolidBrush(RGB(100, 60, 30));
brushes[1].CreateSolidBrush(RGB(20, 120, 90));
brushes[2].CreateSolidBrush(RGB(30, 80, 150));
for (int i = 0; i<3; i++){
pDC->Draw3dRect(&m_Buttons[i], RGB(255, 0, 0), RGB(0, 0, 255));
pDC->FillRect(&m_Buttons[i], &brushes[i]);
}
CFont font;
font.CreatePointFont(300, _T("黑體"));
pDC->SetBkMode (TRANSPARENT);
CFont* pOldFont = pDC->SelectObject(&font);
pDC->DrawText(_T("石"), -1, &m_Buttons[0], DT_VCENTER | DT_SINGLELINE | DT_CENTER);
pDC->DrawText(_T("剪"), -1, &m_Buttons[1], DT_VCENTER | DT_SINGLELINE | DT_CENTER);
pDC->DrawText(_T("布"), -1, &m_Buttons[2], DT_VCENTER | DT_SINGLELINE | DT_CENTER);
}
void CMainWindow::ComputerTurn()
{
srand((unsigned)time(NULL));
m_nComputer = rand()%3;
}
void CMainWindow::Judge()
{
CClientDC dc(this);
CFont font;
font.CreatePointFont (500, _T("黑體"));
dc.SetTextColor(RGB(255, 0, 0));
dc.SetBkMode (TRANSPARENT);
CFont* pOldFont = dc.SelectObject(&font);
switch(m_nComputer){
case SHITOU:
dc.DrawText(_T("石頭"), &m_ViewPart[0], DT_CENTER | DT_VCENTER | DT_SINGLELINE);
dc.SetTextColor(RGB(0, 0, 255));
switch(m_nPlayer){
case SHITOU:
dc.DrawText(_T("石頭"), &m_ViewPart[1], DT_CENTER | DT_VCENTER | DT_SINGLELINE);
m_nWinner = 0;
break;
case JIANDAO:
dc.DrawText(_T("剪刀"), &m_ViewPart[1], DT_CENTER | DT_VCENTER | DT_SINGLELINE);
m_nWinner = 1;
break;
case BU:
dc.DrawText(_T("布"), &m_ViewPart[1], DT_CENTER | DT_VCENTER | DT_SINGLELINE);
m_nWinner = 2;
break;
}
break;
case JIANDAO:
dc.SetTextColor(RGB(255, 0, 0));
dc.DrawText(_T("剪刀"), &m_ViewPart[0], DT_CENTER | DT_VCENTER | DT_SINGLELINE);
dc.SetTextColor(RGB(0, 0, 255));
switch(m_nPlayer){
case SHITOU:
dc.DrawText(_T("石頭"), &m_ViewPart[1], DT_CENTER | DT_VCENTER | DT_SINGLELINE);
m_nWinner = 2;
break;
case JIANDAO:
dc.DrawText(_T("剪刀"), &m_ViewPart[1], DT_CENTER | DT_VCENTER | DT_SINGLELINE);
m_nWinner = 0;
break;
case BU:
dc.DrawText(_T("布"), &m_ViewPart[1], DT_CENTER | DT_VCENTER | DT_SINGLELINE);
m_nWinner = 1;
break;
}
break;
case BU:
dc.SetTextColor(RGB(255, 0, 0));
dc.DrawText(_T("布"), &m_ViewPart[0], DT_CENTER | DT_VCENTER | DT_SINGLELINE);
dc.SetTextColor(RGB(0, 0, 255));
switch(m_nPlayer){
case SHITOU:
dc.DrawText(_T("石頭"), &m_ViewPart[1], DT_CENTER | DT_VCENTER | DT_SINGLELINE);
m_nWinner = 1;
break;
case JIANDAO:
dc.DrawText(_T("剪刀"), &m_ViewPart[1], DT_CENTER | DT_VCENTER | DT_SINGLELINE);
m_nWinner = 2;
break;
case BU:
dc.DrawText(_T("布"), &m_ViewPart[1], DT_CENTER | DT_VCENTER | DT_SINGLELINE);
m_nWinner = 0;
break;
}
break;
}
switch(m_nWinner){
case 0:
MessageBox (_T("平局"), _T("Result"));
Invalidate();
break;
case 1:
MessageBox (_T("電腦勝"), _T("Result"));
Invalidate();
break;
case 2:
MessageBox (_T("玩家勝"), _T("Result"));
Invalidate();
break;
}
}
int CMainWindow::GetIndex(CPoint &point)
{
register int i;
for (i = 0; i < 3; i++)
if (m_Buttons[i].PtInRect(point))
return i;
return -1;
}
⑽ 就C語言中 猜拳游戲的代碼
這是一個簡單的猜拳游戲(剪子包子錘),讓你與電腦對決。你出的拳頭由你自己決定,電腦則隨機出拳,最後判斷勝負。
下面的代碼會實現一個猜拳游戲,讓你與電腦對決。你出的拳頭由你自己決定,電腦則隨機出拳,最後判斷勝負。
啟動程序後,讓用戶出拳,截圖:
用戶出拳,顯示對決結果:截圖:
代碼實現:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
char gamer; // 玩家出拳
int computer; // 電腦出拳
int result; // 比賽結果
// 為了避免玩一次游戲就退出程序,可以將代碼放在循環中
while (1){
printf("這是一個猜拳的小游戲,請輸入你要出的拳頭:\n");
printf("A:剪刀\nB:石頭\nC:布\nD:不玩了\n");
scanf("%c%*c",&gamer);
switch (gamer){
case 65: //A
case 97: //a
gamer=4;
break;
case 66: //B
case 98: //b
gamer=7;
break;
case 67: //C
case 99: //c
gamer=10;
break;
case 68: //D
case 100: //d
return 0;
default:
printf("你的選擇為 %c 選擇錯誤,退出...\n",gamer);
getchar();
system("cls"); // 清屏
return 0;
break;
}
srand((unsigned)time(NULL)); // 隨機數種子
computer=rand()%3; // 產生隨機數並取余,得到電腦出拳
result=(int)gamer+computer; // gamer 為 char 類型,數學運算時要強制轉換類型
printf("電腦出了");
switch (computer)
{
case 0:printf("剪刀\n");break; //4 1
case 1:printf("石頭\n");break; //7 2
case 2:printf("布\n");break; //10 3
}
printf("你出了");
switch (gamer)
{
case 4:printf("剪刀\n");break;
case 7:printf("石頭\n");break;
case 10:printf("布\n");break;
}
if (result==6||result==7||result==11) printf("你贏了!");
else if (result==5||result==9||result==10) printf("電腦贏了!");
else printf("平手");
system("pause>nul&&cls"); // 暫停並清屏
}
return 0;
}
代碼分析
1) 首先,我們需要定義3個變數來儲存玩家出的拳頭(gamer)、電腦出的拳頭(computer)和最後的結果(result),然後給出文字提示,讓玩家出拳。
接下來接收玩家輸入:
scanf("%c%*c",&gamer);