标题: 菜鸟写的斗地主程序 [打印本页] 作者: 何亚辉 时间: 2016-5-19 19:40 标题: 菜鸟写的斗地主程序 import java.util.Scanner;
class PlayCard {
public static void main(String[] args) {
Scanner scr = new Scanner(System.in);
System.out.println("欢迎来到年度最好玩的游戏:玉梅斗地主");
while (true) {
System.out.println("1, 开始游戏");
System.out.println("2, 退出游戏");
Scanner sc = new Scanner (System.in);
int a = sc.nextInt();
if (a==1) {
char[] arr = {48,65,50,51,52,53,54,55,56,57,74,81,75,48,65,50,51,52,53,54,55,56,57,74,81,75,48,65,50,51,52,53,54,55,56,57,74,81,75,48,65,50,51,52,53,54,55,56,57,74,81,75,'大','小'};
char[] result = new char[54];
for (int j=0;j<=2 ;j++ ) {
result[j] = arr[(int)(arr.length* Math.random())];
arr= delete(arr, result[j]);
}
char target = arr[(int)(Math.random()*51)];
for (int j=3;j<=53 ;j++ ) {
result[j]=arr[(int)(arr.length* Math.random())];
arr= delete(arr, result[j]);
}
char[] p1 = new char[17];
char[] p2 = new char[17];
char[] p3 = new char[17];
for (int i =0;i<=16 ;i++ ) {
p1[i]= result[i+3];
}
for (int i =0;i<=16 ;i++ ) {
p2[i]= result[i+20];
}
for (int i =0;i<=16 ;i++ ) {
p3[i]= result[i+37];
}
Player[] py = new Player[3];
Scanner sc3 = new Scanner(System.in);
System.out.println("请设置您的名字");
String str = sc3.nextLine();
py[0] = new Player(str,p1);
py[0].showMyCard();
py[1] = new Player("2号玩家",p2);
py[1].showMyCard();
py[2] = new Player("3号玩家",p3);
py[2].showMyCard();
for (int i =0;i<=16 ;i++ ) {
if (p1[i]==target) {
System.out.println("\n" + py[0].name + "你好,你有地主牌"+target +"请问你要叫地主吗? 请输入Yes or No");
Scanner s0 = new Scanner(System.in);
String st1 =s0.nextLine();
if (st1.equals("Yes")) {
py[0].getAll(result);
py[0].finalCard(result);
py[0].showMyCard();
break;
}else {
py[1].callDZ(py, 1, result);
break;
}
}
if (p2[i]==target) {
int q = (int)(2* Math.random());
if (q==1) {
System.out.println("2号玩家有地主牌"+target+"并成为地主");
py[1].getAll(result);
py[1].finalCard(result);
py[1].showMyCard();
break;
}else {
System.out.println("2号玩家放弃当地主");
py[2].callDZ(py, 2, result);
break;
}
}
if(p3[i]==target) {
int w = (int)(2*Math.random());
if (w==1) {
System.out.println("3号玩家有地主牌"+target+ "并成为地主");
py[2].getAll(result);
py[2].finalCard(result);
py[2].showMyCard();
break;
}
else {
System.out.println("3号玩家放弃当地主");
py[0].callDZ(py, 0, result);
break;
}
}
}
while (true) {
py[0].outCard(py, 0);
if (py[0].mycard.length==0) {
System.out.println(py[0].name+ "赢了");
System.out.print(py[1].name +"最后的牌为: ");
for (int i =0;i<=py[1].mycard.length-1 ;i++ ) {
System.out.print(py[1].mycard[i]+" ");
}
System.out.println();
System.out.print(py[2].name +"最后的牌为: ");
for (int i =0;i<=py[2].mycard.length-1 ;i++ ) {
System.out.print(py[2].mycard[i]+" ");
}
System.out.println();
break;
}
py[1].outCard(py, 1);
if (py[1].mycard.length==0) {
System.out.println(py[1].name+ "赢了");
System.out.print(py[2].name +"最后的牌为: ");
for (int i =0;i<=py[2].mycard.length-1 ;i++ ) {
System.out.print(py[2].mycard[i]+" ");
}
System.out.println();
System.out.print(py[0].name +"最后的牌为: ");
for (int i =0;i<=py[0].mycard.length-1 ;i++ ) {
System.out.print(py[0].mycard[i]+" ");
}
System.out.println();
break;
}
py[2].outCard(py, 2);
if(py[2].mycard.length==0) {
System.out.println(py[2].name+ "赢了");
System.out.print(py[0].name +"最后的牌为: ");
for (int i =0;i<=py[0].mycard.length-1 ;i++ ) {
System.out.print(py[0].mycard[i]+" ");
}
System.out.println();
System.out.print(py[1].name +"最后的牌为: ");
for (int i =0;i<=py[1].mycard.length-1 ;i++ ) {
System.out.print(py[1].mycard[i]+" ");
}
System.out.println();
break;
}
}
}
else {
System.out.println("谢谢使用,下次再见");
break;
}
}
}
public static char[] delete(char[]arr, char x){
char[] a = new char[arr.length-1];
int i =0;
for (i =0;i<arr.length ;i++ ) {
if (arr[i]==x) {
break;
}
}
for (int j =0;j<arr.length-1 ; j++) {
if (j<i) {
a[j]=arr[j];
}else {
a[j]=arr[j+1];
}
}
return a;
}
}
class Player {
String name;
char[] mycard ;
static int rank=16;
public Player(String name, char[] ch){
this.name = name;
mycard = ch;
}
public void showMyCard(){
char[] standard = {'大','小','2','A','K','Q','J','0','9','8','7','6','5','4','3'};
for (int i =0;i<mycard.length-1 ;i++ ) {
for (int j =mycard.length-1;j>i ;j-- ) {
int k =0; int k1=0;
for ( k=0;k<=14 ;k++ ) {
if (mycard[i]==standard[k]) {
break;
}
}
for (k1=0;k1<=14 ;k1++ ) {
if (mycard[j]==standard[k1]) {
break;
}
}
if (k>k1) {
char temp = mycard[i];
mycard[i]=mycard[j];
mycard[j] = temp;
}
}
}
if (!(name.equals("2号玩家"))&&!(name.equals("3号玩家"))) {
System.out.print("\n" +"这是您的牌--");
for (int i =0;i<=mycard.length-1 ;i++ ) {
System.out.print(mycard[i]+" ");
try {
Thread.sleep(100);
}
catch (Exception e) {
}
}
System.out.println("\n");
}
}
public void callDZ(Player[] py, int i, char[] arr){
if (!(name.equals("2号玩家"))&&!(name.equals("3号玩家"))) {
Scanner sc = new Scanner(System.in);
System.out.println(name+ "您好,请问你要叫地主吗? 请输入Yes or No");
String s = sc.nextLine();
if (s.equals("Yes")) {
getAll(arr);
py[i].finalCard(arr);
py[i].showMyCard();
return;
}else {
System.out.println(py[(i+1)%3].name +"自动成为地主");
py[(i+1)%3].getAll(arr);
py[(i+1)%3].finalCard(arr);
py[(i+1)%3].showMyCard();
}
}
else {
int q = (int)(2* Math.random());
if (q==1) {
System.out.print(py[i].name +"成为地主");
py[i].getAll(arr);
py[i].finalCard(arr);
py[i].showMyCard();
return;
}
else {
System.out.println(py[i].name + "放弃成为地主");
System.out.println(py[(i+1)%3].name +"自动成为地主");
py[(i+1)%3].getAll(arr);
py[(i+1)%3].finalCard(arr);
py[(i+1)%3].showMyCard();
}
}
}
public void getAll( char[] arr){
System.out.print("3张地主底牌是");
for (int i=0;i<=2 ;i++ ) {
System.out.print(arr[i]+ " ");
}
System.out.println();
}
作者: 何亚辉 时间: 2016-5-19 19:42
public void outCard(Player[] p, int i ){
if (!(name.equals("2号玩家"))&&!(name.equals("3号玩家"))) {
while (true) {
char[] standard = {'大','小','2','A','K','Q','J','0','9','8','7','6','5','4','3'};
for (int d=0;d<=14 ;d++ ) {
if (mycard[0]==standard[d]) {
if (d>=rank) {
System.out.println(name+"没有比上家大的牌");
return;
}
}
}
Scanner s0 = new Scanner(System.in);
System.out.print(name + "你要出第几张牌----0代表不要: ");
int q =s0.nextInt();
if (q==0) {
System.out.println();
return;
}
int w =0;
for (w=0;w<standard.length ; w++) {
if (mycard[q-1]==standard[w]) {
break;
}
}
int r =0;
for (r=0;r<standard.length ; r++) {
if (p[(i+1)%3].mycard[0]==standard[r]) {
break;
}
}
int m =0;
for (m=0;m<standard.length ; m++) {
if (p[(i+2)%3].mycard[0]==standard[m]) {
break;
}
}
if (w<=r&&w<=m) {
System.out.println(name+"-----打出一张"+ mycard[q-1]);
System.out.println(p[(i+1)%3].name + "没有更大的牌");
System.out.println(p[(i+2)%3].name + "没有更大的牌");
rank=16;
mycard = nextMyCard(q);
if (mycard.length==0) {
return;
}
showMyCard();
continue;
}
if (w>= rank) {
System.out.println("你的牌没有上家大");
continue;
}
rank=w;
System.out.println(name+"-----打出一张"+ mycard[q-1]);
mycard = nextMyCard(q);
showMyCard();
return;
}
}else {
while (true) {
char[] standard1 = {'大','小','2','A','K','Q','J','0','9','8','7','6','5','4','3'};
for (int d=0;d<=14 ;d++ ) {
if (mycard[0]==standard1[d]) {
if (d>=rank) {
System.out.println(name+ "没有比上家大的牌");
return;
}
}
}
int x =(int)(mycard.length* Math.random())+1;
int f =0;
for (f=0;f<standard1.length ; f++) {
if (mycard[x-1]==standard1[f]) {
break;
}
}
int g =0;
for (g=0;g<standard1.length ; g++) {
if (p[(i+1)%3].mycard[0]==standard1[g]) {
break;
}
}
int h =0;
for (h=0;h<standard1.length ; h++) {
if (p[(i+2)%3].mycard[0]==standard1[h]) {
break;
}
}
if (f<=g&&f<=h) {
System.out.println(name+"-----打出一张"+ mycard[x-1]);
System.out.println(p[(i+1)%3].name + "没有更大的牌");
System.out.println(p[(i+2)%3].name + "没有更大的牌");
rank=16;
mycard = nextMyCard(x);
if (mycard.length==0) {
return;
}
continue;
}
if (f >= rank) {
continue;
}
rank=f;
System.out.println(name+"-----打出一张"+ mycard[x-1]);
mycard = nextMyCard(x);
return;
}
}
}
public void finalCard(char[] arr){
char[] ch1 = new char[20];
for (int i =0;i<=19 ;i++ ) {
if (i<=16) {
ch1[i]=mycard[i];
}else {
ch1[i]= arr[i-17];
}
}
mycard = ch1;
}
public char[] nextMyCard(int f){
char[] temp2 = new char[mycard.length-1];
for (int e =0;e<mycard.length-1 ;e++ ) {
if (e<f-1) {
temp2[e]=mycard[e];
}else {
temp2[e]=mycard[e+1];
}
}
return temp2;
}
}作者: 一枚小程序员 时间: 2016-5-19 22:00
楼主好毅力作者: Noodles. 时间: 2016-5-19 22:10
{:2_33:} 太腻害了作者: 溪溪笑 时间: 2016-5-19 22:19
看一看。。。。。。。。。。。