日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

分享人生第一个游戏源代码

發(fā)布時(shí)間:2024/4/14 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分享人生第一个游戏源代码 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

第一次自己寫博客,與大家分享一下自己第一個(gè)寫的算正經(jīng)的游戲。這是我家鄉(xiāng)江西一個(gè)本土游戲,名字叫“斗牛”,是一種賭博游戲。

賭博有害家庭健康,因此將其改編成簡單的游戲,希望所有的家庭和睦。

??這是我寫的第一個(gè)游戲,雖然寫的繁瑣而且效率低下,但對于學(xué)了半年的我來說,這是莫大的安慰。在缺乏生氣的大學(xué)生活里,有一種

興趣堅(jiān)持自己的興趣是難能寶貴的,我想這能讓生活更充實(shí)些吧!

?? ? 人有興趣愛好就好,就不至于迷茫。愛好興趣有庸俗、高壓之分,但他們給人的充實(shí)與愉悅感的價(jià)值是等效的。萬事開頭難,學(xué)C語言

開始比較艱難,如果能挺過來,并且發(fā)現(xiàn)其中的興趣就會發(fā)現(xiàn),它能帶給人們滿足感!

?

/*建立二人斗牛游戲的程序*/

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <time.h>

/*牌的數(shù)據(jù)結(jié)構(gòu)*/

typedef struct

{

char face[4];

int num;

}FACE;

/*建立返回牌結(jié)果的數(shù)據(jù)結(jié)構(gòu)*/

typedef struct

{

int result; ? ?//點(diǎn)數(shù)

int max; ? ? //最大的那張牌

int number; ? ?//如果多張牌時(shí)返回

int numberzhi;

}PAIRESULT;

/*建立總共紙牌初始函數(shù)*/

void inition(FACE zong[])

{

int i;

for(i=1;i<=4;i++)

{

strcpy(zong[i].face,"3");

zong[i].num=0;

}

for(i=5;i<=8;i++)

{

strcpy(zong[i].face,"4");

zong[i].num=1;

}

for(i=9;i<=12;i++)

{

strcpy(zong[i].face,"5");

zong[i].num=2;

}

?? ?for(i=13;i<=16;i++)

{

strcpy(zong[i].face,"6");

zong[i].num=3;

}

for(i=17;i<=20;i++)

{

strcpy(zong[i].face,"7");

zong[i].num=4;

}

for(i=21;i<=24;i++)

{

strcpy(zong[i].face,"8");

zong[i].num=5;

}

for(i=25;i<=28;i++)

{

strcpy(zong[i].face,"9");

zong[i].num=6;

}

for(i=29;i<=32;i++)

{

strcpy(zong[i].face,"10");

zong[i].num=7;

}

for(i=33;i<=36;i++)

{

strcpy(zong[i].face,"J");

zong[i].num=8;

}

for(i=37;i<=40;i++)

{

strcpy(zong[i].face,"Q");

zong[i].num=9;

}

for(i=41;i<=44;i++)

{

strcpy(zong[i].face,"K");

zong[i].num=10;

}

for(i=45;i<=48;i++)

{

strcpy(zong[i].face,"A");

zong[i].num=11;

}

for(i=49;i<=52;i++)

{

strcpy(zong[i].face,"2");

zong[i].num=12;

}

}

/*建立輸出函數(shù)*/

void output(int n,FACE zong[],int k)

{

int i;

printf("/n");

if(k==2)

printf("這是玩家的牌/n");

else

printf("這是莊家的牌/n");

for(i=1;i<=n;i++)

printf("%s ",zong[i].face);

printf("/n");

}

/*建立洗牌函數(shù)*/

void xipai(FACE zong[])

{

int i,j;

long k;

FACE temp;

srand(time(NULL));

for(k=1;k<1000;k++)

{

i=1+rand()%52;

j=1+rand()%52;

temp=zong[i];

zong[i]=zong[j];

zong[j]=temp;

}

}

?

/*建立發(fā)牌函數(shù)*/

void fapai(FACE zong[],FACE player1[],FACE player2[])

{

int i=1,c1=1,c2=1;

for(i=1;i<=10;)

{

player1[c1++]=zong[i++];

player2[c2++]=zong[i++];

}

}

/*建立牌的排序函數(shù)*/

void paisort(FACE player[])

{

FACE temp;

int i,j;

for(i=0;i<4;i++)

for(j=1;j<=4-i;j++)

if(player[j].num>player[j+1].num)

{

temp=player[j];

player[j]=player[j+1];

player[j+1]=temp;

}

}

/*建立只有三張非紙牌的函數(shù)*/

int san(int a2[])

{

if((a2[0]+a2[1]+a2[2])%10==0)//三張牌和為十的倍數(shù)時(shí)

? ?return 10;

else ? //沒有牛時(shí)

{ ??

/*以下是有兩張牌和為10時(shí)*/

if(a2[0]+a2[1]==10) ?return a2[2]; ?

if(a2[0]+a2[2]==10) ? ?return a2[1];

if(a2[1]+a2[2]==10) ? ?return a2[0];

else

return 0;

}?

}

?

/*建立有四張非花牌時(shí)的函數(shù)*/

int si(int a[])

{

if((a[0]+a[1]+a[2])%10==0) ? //其中有三張牌和為10的倍數(shù)時(shí)

return a[3];

? if((a[0]+a[1]+a[3])%10==0)

? return a[2];

?? ? ? if((a[0]+a[2]+a[3])%10==0)

? return a[1];

? if((a[3]+a[1]+a[2])%10==0)

? return a[0];

? /*以下是有兩張牌和為1*/

? else

? {

? if(a[0]+a[1]==10&&a[2]+a[3]==10)

? return 10;

? if(a[0]+a[1]==10&&a[2]+a[3]!=10)

? return (a[2]+a[3])%10;

? if(a[0]+a[2]==10&&a[1]+a[3]==10)

? return 10;

? if(a[0]+a[2]==10&&a[1]+a[3]!=10)

? return (a[1]+a[3])%10;

? if(a[0]+a[3]==10&&a[2]+a[1]==10)

? return 10;

?? ? ? ? ? if(a[0]+a[3]==10&&a[2]+a[1]!=10)

? return (a[2]+a[1])%10;

? if(a[1]+a[2]==10&&a[0]+a[3]==10)

? return 10;

? if(a[1]+a[2]==10&&a[0]+a[3]!=10)

? return (a[0]+a[3])%10;

? if(a[1]+a[3]==10&&a[0]+a[2]==10)

? return 10;

?? ? ? ? ? if(a[1]+a[3]==10&&a[0]+a[2]!=10)

? return (a[2]+a[0])%10;

? if(a[2]+a[3]==10&&a[0]+a[1]==10)

? return 10;

?? ? ? ? ? if(a[2]+a[3]==10&&a[0]+a[1]!=10)

? return (a[0]+a[1])%10;

? /*若無法湊出十時(shí),點(diǎn)為零*/

? else

? return 0;

? } ?

}

/*若無張牌都為非花牌,即五張非花牌時(shí),若要有點(diǎn)數(shù),必須用三張牌來湊點(diǎn)數(shù)*/

int wu(int a[])

{

if((a[0]+a[1]+a[2])%10==0&&a[3]+a[4]==10)

return 10;

if((a[0]+a[1]+a[2])%10==0&&a[3]+a[4]!=10)

return (a[3]+a[4])%10;

if((a[0]+a[1]+a[3])%10==0&&a[2]+a[4]==10)

return 10;

if((a[0]+a[1]+a[3])%10==0&&a[2]+a[4]!=10)

return (a[2]+a[4])%10;

if((a[0]+a[1]+a[4])%10==0&&a[2]+a[3]==10)

return 10;

if((a[0]+a[1]+a[4])%10==0&&a[2]+a[3]!=10)

return (a[2]+a[3])%10;

if((a[0]+a[2]+a[3])%10==0&&a[1]+a[4]==10)

return 10;

if((a[0]+a[2]+a[3])%10==0&&a[1]+a[4]!=10)

return (a[1]+a[4])%10;

if((a[0]+a[2]+a[4])%10==0&&a[1]+a[3]==10)

return 10;

if((a[0]+a[2]+a[4])%10==0&&a[1]+a[3]!=10)

return (a[1]+a[3])%10;

if((a[0]+a[4]+a[3])%10==0&&a[2]+a[1]==10)

return 10;

if((a[0]+a[4]+a[3])%10==0&&a[2]+a[1]!=10)

return (a[2]+a[1])%10;

if((a[2]+a[1]+a[3])%10==0&&a[4]+a[0]==10)

return 10;

if((a[2]+a[1]+a[3])%10==0&&a[0]+a[4]!=10)

return (a[0]+a[4])%10;

if((a[2]+a[1]+a[4])%10==0&&a[0]+a[3]==10)

return 10;

if((a[2]+a[1]+a[4])%10==0&&a[0]+a[3]!=10)

return (a[0]+a[3])%10;

if((a[4]+a[1]+a[3])%10==0&&a[2]+a[0]==10)

return 10;

if((a[4]+a[1]+a[3])%10==0&&a[2]+a[0]!=10)

return (a[2]+a[0])%10;

if((a[2]+a[4]+a[3])%10==0&&a[0]+a[1]==10)

return 10;

if((a[2]+a[4]+a[3])%10==0&&a[0]+a[1]!=10)

return (a[0]+a[1])%10;

else

return 0;

}

/*建立求最大值的函數(shù)*/

int searchmaxpai(FACE player[])

{

int a[7]={0},i,max;

for(i=1;i<=5;i++)

{

if(player[i].num>=11)

a[i]=player[i].num-13;

else

a[i]=player[i].num;

}

for(max=a[1],i=1;i<=5;i++)

if(max<a[i])

max=a[i];

return max;

}

/*建立計(jì)算有幾張重復(fù)牌的函數(shù)*/

void countrepeat(int a[],int n,int b[])

{

int k[5]={0},i=0,j=0,temp=0;

for(i=0;i<n;i++)

{

temp=a[i];

for(j=0;j<n;j++)

if(temp==a[j])

k[i]++;

}

for(i=0;i<n;i++)

{

if(k[i]>=3)

{

b[0]=k[i]; ? //b[0]存儲重復(fù)數(shù)目

b[1]=a[i];

break;//b[1]存儲對應(yīng)的值

}

}

}

/*建立計(jì)算牌的點(diǎn)數(shù)的函數(shù),這是游戲的核心算法*/

PAIRESULT jisuan(FACE player[],PAIRESULT finalresult)

{

int a1[5]={0},c1=0;//用于存儲10,J,Q,K的花牌表示的值

int a[2]={-1,-1};

int a2[5]={0},c2=0; //用于存儲非花牌表示的值

int i;

for(i=1;i<=5;i++) ?//總共5次

{

if(player[i].num>=7&&player[i].num<=10) ?//如果是花牌時(shí)

a1[c1++]=player[i].num+3;

else

if(player[i].num>=0&&player[i].num<=6)//如果是3-9時(shí)

a2[c2++]=player[i].num+3;

else

a2[c2++]=player[i].num-10; ?//如果是A或2時(shí)

} //完成對牌的分類存儲

/*以下對非花牌進(jìn)行計(jì)算點(diǎn)數(shù)*/

switch(c2)

{

case 0 : finalresult.result=10;break; //都是花牌時(shí)

case 1 : finalresult.result=a2[0];break; ?//只有一張非花牌時(shí)

/*只有二張非零牌時(shí)*/

case 2 : {if(a2[0]+a2[1]==10)

finalresult.result=10;

else

finalresult.result=(a2[0]+a2[1])%10;

}break;

/*以下是由三張非花牌時(shí)*/

case 3 : finalresult.result=san(a2);break;

/*以下是四張非花牌時(shí)*/

case 4 : finalresult.result=si(a2);break;

/*以下是五張非花牌時(shí)*/

case 5 : finalresult.result=wu(a2);break;

}

finalresult.max=searchmaxpai(player); ? ? ? //最大牌的值,便于點(diǎn)數(shù)相同時(shí)比較大小

/*以下對有可能有的多張牌進(jìn)行處理,存儲最多的牌*/

if(c1>=3)

{

countrepeat(a1,c1,a);

if(a[0]>=3)

{

finalresult.number=a[0]+1; ? //如果是花牌有多張時(shí)倍數(shù)更大

finalresult.numberzhi=a[1];

}

}

else

? if(c2>=3)

? {

? countrepeat(a2,c2,a);

? if(a[0]>=3)

? {

? finalresult.number=a[0];

? finalresult.numberzhi=a[1];

? }

? }

? else

? finalresult.number=finalresult.numberzhi=-1;

? return finalresult;

}

PAIRESULT build()

{

PAIRESULT final;

final.max=-1,

final.number=-1;

final.result=final.numberzhi=-1;

return final;

}

/*建立牌的比較函數(shù),a[0]總金錢,a[1]表示押金*/

int ?compare(PAIRESULT final1,PAIRESULT final2,int a[])

{

int t=a[0];

/*做如下規(guī)定,四張相同牌,20,三張相同牌15倍,五張即四張花牌時(shí)25被*/

/*相同牌時(shí)莊家牌大*/

switch(final1.number)

{

? case 5 : ?{if(final2.number==5&&final1.numberzhi>=final2.numberzhi)

{

a[0]=a[0]-a[1]*25;

break;

}

? if(final2.number==5&&final1.numberzhi<final2.numberzhi)

? {

? a[0]=a[0]+a[1]*25;

? break;

? }

? else

? {

? a[0]=a[0]-a[1]*25;

? break;

? }

};

? case 4 : ?{ if(final2.number==5)

{

a[0]=a[0]+a[1]*25;

break;

}

? if(final2.number==4&&final1.numberzhi>=final2.numberzhi)

? {

? a[0]=a[0]-a[1]*20;

? break;

? }

? if(final2.number==4&&final1.numberzhi<final2.numberzhi)

? {

? a[0]=a[0]+a[1]*20;

? break;

? }

? else

? {

? a[0]=a[0]-a[1]*20;

? break;

? }

}

? case 3 : ?{ ? if(final2.number==5)

{

a[0]=a[0]+a[1]*25;

break;

}

? if(final2.number==4)

? {

? a[0]=a[0]+a[1]*20;

? break;

? }

? if(final2.number==3&&final1.numberzhi<final2.numberzhi)

? {

? a[0]=a[0]+a[1]*15;

? break;

? }

? else

? {

? a[0]=a[0]-a[1]*15;

? break;

? }

};

? case -1 : {?

? if(final2.number==5)

? {

? a[0]=a[0]+a[1]*25;

? break;

? }

? if(final2.number==4)

? {

? a[0]=a[0]+a[1]*20;

? break;

? }

? if(final2.number==3)

? {

? a[0]=a[0]+a[1]*15;

? break;

? }

? if(final1.result>final2.result)//莊家牌大時(shí)

? {

? if(final1.result==10)

? {

? a[0]=a[0]-a[1]*3;

? break;

? }

? if(final1.result>=7&&final1.result<=9)

? {

? a[0]=a[0]-a[1]*2;

? break;

? }

? if(final1.result<7)

? {

? a[0]=a[0]-a[1];

? break;

? }

? }

? else

? if(final1.result<final2.result)//玩家牌大時(shí)

? {

? if(final2.result==10)

? {

? a[0]=a[0]+a[1]*3;

? break;

? }

? if(final2.result>=7&&final2.result<=9)

? {

? a[0]=a[0]+a[1]*2;

? break;

? }

? if(final2.result<7)

? {

? a[0]=a[0]+a[1];

? break;

? }

? }

? else

? { ?if(final1.result==10&&final1.max>=final2.max)

? { ? ??

? a[0]=a[0]-a[1]*3;

? break;

? }

? if(final1.result==10&&final1.max<final2.max)

? { ? ??

? a[0]=a[0]+a[1]*3;

? break;

? }

? if(final1.result>=7&&final1.result<=9&&final1.max>=final2.max)

? { ?

? a[0]=a[0]-a[1]*2;

? break;

? }

? if(final1.result>=7&&final1.result<=9&&final1.max<final2.max)

? { ?

? a[0]=a[0]+a[1]*2;

? break;

? }

? if(final1.result<7&&final1.max>=final2.max)

? { ?

? a[0]=a[0]-a[1];

? break;

? }

? if(final1.result<7&&final1.max<final2.max)

? { ?

? a[0]=a[0]+a[1];

? break;

? }

? }

}

}

return a[0]-t;

}

void menu()

{

printf("/t/t/t歡迎來到“歡樂斗牛”游戲/n");

printf("請按數(shù)字鍵選擇/n");

printf("/t1:開始游戲/n");

printf("/t2:游戲規(guī)則/n");

printf("/t3:離開游戲/n");

}

/*建立游戲規(guī)則函數(shù)*/

void instruction()

{

printf("/t斗牛也屬于紙牌游戲,該游戲中游戲?yàn)榍f家,你為玩家./n");

printf("/t游戲開始時(shí)系統(tǒng)送你100游戲幣,輸完時(shí)游戲結(jié)束.");

?? ?printf("/t規(guī)則簡要如下:/n");

printf( "/t每人有五張牌,比較點(diǎn)數(shù),點(diǎn)數(shù)大者勝。計(jì)算點(diǎn)數(shù)時(shí)10、J、Q、/n");

printf("/tK為花牌,用非花牌計(jì)算點(diǎn)數(shù),若五張牌中沒有一張花牌,任意用/n");

printf("/t其中三張湊成10的倍數(shù),如果不能,則點(diǎn)數(shù)為零,如果能湊成,用/n");

printf("/t另外兩張之和除以十,余數(shù)為點(diǎn)數(shù)。若有花牌時(shí),可以用其中兩張/n");

printf("/t或三張牌湊成10的倍數(shù),如果能,結(jié)果為其余牌之和除以10的余數(shù)/n");

printf("/t(余數(shù)為零點(diǎn)數(shù)為10)。不能時(shí),點(diǎn)數(shù)為零。當(dāng)點(diǎn)數(shù)相同時(shí),以牌/n");

printf("/t面值大者勝./n");

printf("/t0-6點(diǎn)倍率為1,7-9點(diǎn)倍率為2,10點(diǎn)倍率為3/n");

printf("/t三張相同面值的非花牌,倍率15,四張20/n");

printf("/t三張相同面值的花牌,倍率20,四張25/n");

printf("/t賭博有害家庭健康,該游戲僅供娛樂/n");

}

int main()

{

FACE zong[52];//總共的48張紙牌

PAIRESULT final1=build(),final2=build();//牌的結(jié)果

FACE player1[5],player2[5]; ?//用于存儲兩個(gè)玩家的牌,player1是莊家,player2是玩家

inition(zong);

int flag,a[2]={100,0},count=1,defen;

char ch;

?? ?/*以下是游戲菜單*/

menu();

scanf("%d",&flag);

while(flag<1||flag>3)

{

printf("數(shù)字輸入錯(cuò)誤,請重新輸入/n");

scanf("%d",flag);

}

?? ?while(flag!=1)

{

if(flag==3)

exit(0);

else

if(flag==2)

{

instruction();

menu();

scanf("%d",&flag);

}

}

if(flag==1)

{

printf("/t/t現(xiàn)在開始游戲/n");

printf("/t/t系統(tǒng)先送你100游戲幣,當(dāng)游戲幣不大于零時(shí)游戲結(jié)束/n");

while(1)

{

printf("/t/t/t/t第%d局/n",count);

printf("請下注(1-10游戲幣),目前你的游戲幣為%d/n",a[0]);

while(1)

{

scanf(" %d",&a[1]);

if(a[1]>0&&a[1]<=10)

break;

else

printf("輸入數(shù)據(jù)范圍不對,請重新選擇/n");

}

xipai(zong); ?//洗牌

fapai(zong,player1,player2); ?//發(fā)牌

paisort(player1); ?output(5,player1,1); ?//莊家的牌,先排序在現(xiàn)實(shí)牌

paisort(player2); ? output(5,player2,2); ?//玩家的牌,先排序在顯現(xiàn)牌

final1=jisuan(player1,final1); ? ?//計(jì)算點(diǎn)數(shù)

final2=jisuan(player2,final2); ? //計(jì)算點(diǎn)數(shù)

defen=compare(final1,final2,a);

if(final1.number>=3&&final1.numberzhi>=11)

printf("/t莊家有%d張牌相同/n",(final1.number-1));

else

if(final1.number>=3&&final1.numberzhi<11)

printf("/t莊家有%d張牌相同/n",final1.number);

else

printf("/t莊家牌的點(diǎn)數(shù): %d/n",final1.result);

?

if(final2.number>=3&&final2.numberzhi>=11)

printf("恭喜你,你有%d張牌相同/n",(final2.number-1));

else

if(final2.number>=3&&final2.numberzhi<11)

printf("恭喜你,你有%d張牌相同/n",final2.number);

else

if(final2.result==10)

printf("/t/t你牛了,牛氣沖天/n");

else

if(final2.result>=7&&final2.result<=9)

printf("/t/t你進(jìn)套了,點(diǎn)數(shù):%d/n",final2.result);

else

printf("/t/t你的點(diǎn)數(shù):%d/n",final2.result);

if(defen>0)

printf("/t本局你勝,得分:%d/n",defen);

else

if(defen==0)

printf("/t本局平局/n");

else

printf("/t本局你輸了,再接再厲,得分:%d/n",defen);

printf("/t/t/t/t總游戲幣:%d/n",a[0]);

if(a[0]<=0)

break;

else

{

printf("/t/t繼續(xù)C(continue)/t/t退出游戲E(end)/n");

scanf(" %c",&ch);

if(ch=='e')

break;

else

{

count++;

final1=final2=build();

}

}

}

}

if(a[0]==100)

printf("/t游戲結(jié)果平局/n");

else

if(a[0]>100)

printf("/t恭喜你,你贏的游戲幣%d/n",a[0]-100);

else

printf("/t再接再厲,你輸了游戲幣%d/n",100-a[0]);

return 0;

}

?

轉(zhuǎn)載于:https://www.cnblogs.com/it20120227/archive/2011/03/03/2370952.html

總結(jié)

以上是生活随笔為你收集整理的分享人生第一个游戏源代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。