码迷,mamicode.com
首页 > 其他好文 > 详细

一个扑克牌游戏的模拟

时间:2016-02-22 00:20:10      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:

每人8张牌,每次抽两张,三个玩家和庄家依次比较,

对子比非对子大,对王最大,依次KQJ 10 9 8```2 A

非对子时,求和,只考虑个位数

分步骤模拟容易不清楚,同时庞杂的变量再次证明可读性多么重要

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define JU 100000
#define QIAN 5000
int main() {

	int ju,win=0,sum=0,lose=0;
	srand(time(NULL));//以时间为种子
	for(ju=1; ju<=JU; ju++) {//局数
		int b[54]= {14,14,
		            1,2,3,4,5,6,7,8,9,10,11,12,13,
		            1,2,3,4,5,6,7,8,9,10,11,12,13,
		            1,2,3,4,5,6,7,8,9,10,11,12,13,
		            1,2,3,4,5,6,7,8,9,10,11,12,13,
		           };//初始化牌
		int player[4][8]= {0}; //初始化玩家
		int playering[4][2]= {0}; //初始化玩家要比较的牌
		int money[4]= {QIAN,QIAN,QIAN,QIAN}; // 初始化钱
		int flag=0,i,j,k,num,m,ci,p1,p2,x,temp,num1,num2;

		for(ci=0; flag==0; ci++) {//次数,直至一个玩家输光
			for(j=0; j<=53; j++) {//洗牌
				x=rand()%54;
				temp=b[x];
				b[x]=b[j];
				b[j]=temp;
			}
			for(j=0; j<=3; j++) { //发牌
				for(k=0; k<=7; k++) {
					player[j][k]=b[j*8+k];
				}
			}
			for(j=0; j<=3; j++) { //每次玩牌的内部的轮数
				for(k=0; k<=3; k++) { //抽出两张牌放在比较区
					playering[k][0]=player[k][8-2*j-1];
					playering[k][1]=player[k][8-2*j-2];

				}
				for(k=1; k<=3; k++) {
					if(playering[k][0]==playering[k][2]&&playering[0][0]==playering[0][1]) { //庄家和玩家都是对
						if(playering[0][0]>=playering[k][0]) {
							money[0]+=10;
							money[k]-=10;
						} else {
							money[0]-=10;
							money[k]+=10;
						}

					} else if(playering[k][0]==playering[k][1]) {
						money[0]-=10;
						money[k]+=10;
					} else if(playering[0][0]==playering[0][1]) {
						money[0]+=10;
						money[k]-=10;
					} else {
						if(playering[0][0]>10)//初始化jqk小王大王
							playering[0][0]=1;
						if(playering[0][1]>10)
							playering[0][1]=1;
						if(playering[k][0]>10)
							playering[k][0]=1;
						if(playering[k][1]>10)
							playering[k][1]=1;
						p1= playering[0][0]+playering[0][1];
						if(p1>10)
							p1%=10;
						p2= playering[k][0]+playering[k][1];
						if(p2>10)
							p2%=10;
						if(p1>p2) {
							money[0]+=10;
							money[k]-=10;
						} else {
							money[0]-=10;
							money[k]+=10;
						}
					}
				}
			}
			for(j=0; j<=3; j++) { //判断是否钱为零
				if(money[j]<=0) {
					flag=1;
				}
			}
		}
	//	printf("第%d局,庄家:%d,玩家1:%d,玩家2:%d,玩家3:%d\n",ju,money[0],money[1],money[2],money[3]);
		if(money[0]>QIAN)
			win++;
		if(money[0]<=0)
			lose++;
			sum+=money[0];
	}
	printf("%d\n",win);
	printf("%d\n",lose);
	printf("%d",sum/JU);
}

 

一个扑克牌游戏的模拟

标签:

原文地址:http://www.cnblogs.com/lhy1024/p/5205753.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!