一个扑克牌游戏的模拟

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个扑克牌游戏的模拟相关的知识,希望对你有一定的参考价值。

每人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);
}

 

以上是关于一个扑克牌游戏的模拟的主要内容,如果未能解决你的问题,请参考以下文章

模拟斗地主洗牌发牌

[UPC10525]:Dove打扑克(暴力+模拟)

模拟斗地主洗牌发牌-JAVA

第五章作题业

HTML5 实现扑克翻牌游戏

C# 之 扑克游戏 -- 21点规则介绍和代码实现