实验一 21 点游戏
一、实验目的
1.掌握使用 Java 语言进行结构化程序设计;
2.熟悉 Java 基本语法,基本数据类型,各种运算符及表达式的使用,掌握运算符优先
级,熟悉使用 Java 的选择语句,循环语句。
3.熟悉 Eclipse 开发环境,编写简单的 Application 程序,并编译和执行。
二、实验要求
1.调试程序、编译,运行后得到正确的结果;
2.写出实验报告,要求记录编译和执行 Java 程序当中的系统错误信息提示,并给出解
决办法。
三、实验环境
1.计算机一台;
2.JDK、MyEclipse 工具软件。
四、实验内容
编写并运行 21 点游戏。
具有菜单形式的界面
掌握 Random 类基本用法
设计胜负判定算法
五、实验步骤
1.了解 21 点游戏的基本规则
2.用 0 到 53 代表 52 张扑克牌
3.完成洗牌发牌模块
4.设计胜负判定算法
六、试验程序
package app1;
class Card{
String color; //纸牌的花色
String digital;//纸牌的数值大小
//返回纸牌的数值大小
public String getCardDigital(){
return digital;
}
//返回纸牌的花色和大小
public String getCard(){
return color + digital;
}
//设置纸牌的花色和大小
public void setCard(String color,String digital){
this.color = color;
this.digital = digital;
}
}
package app1;
public class Function {
public void replaceCard(Card cardA,Card cardB){
Card temp = new Card();
temp.setCard(cardA.color, cardA.digital);
cardA.setCard(cardB.color, cardB.digital);
cardB.setCard(temp.color, temp.digital);
}
public int
cardJudge(int num1,int num2){
if(num1 < 21 && num2
else if(temp == "A")
return 1;
else
return Integer.parseInt(temp);
}
public void gameOutcomeJudge(){
}
}
package app1;
import java.util.Random;
import java.util.Scanner;
public class Game21Point {
public static void main(String[] args) {
// TODO Auto-generated method stub
Game21Point game =new Game21Point();
Function function=new Function();
String colorArray[] = {"黑桃","红桃","梅花","方块"};
String
digitalArray[]
{"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
=
//新开一副扑克牌
Card[] card = new Card[52];
int count = 0; //card[]数组的角标志
int countPerson = 0;
int countComputer = 0;
for(int i=0;i<52;i++){
//person[]数组的角标志
//computer[]数组的角标志
card[i] = new Card();
card[i].setCard(colorArray[i/13], digitalArray[i%13]);
}
//洗牌程序,对 52 个位置进行交叉互换
for(int i=0;i<52;i++){
Random random = new Random();
int j = random.nextInt(52);
if(i != j){
function.replaceCard(card[i],card[j]);
}
}
System.out.println("欢迎进入 21 点游戏模式");
Scanner reader = new Scanner(System.in);
//定义并且输入一个字符
String ch;
//判断如果不是 n 或者 N 的话就重新玩,否则游戏结束
//person[]存放玩家的牌
//
System.out.println("Y");
Card[] person = new Card[5];
Card[] computer = new Card[5]; //computer[]存放电脑的牌
int sumPersonPoint = 0;
//统计玩家的点数
int sumComputerPoint = 0; //统计电脑的点数
boolean flagPerson = true;
boolean flagComputer = true;
boolean flagPersonGetA = false;
//游戏刚开始时候,电脑和玩家各自发两张底牌
for(int i=0;i<2;i++){
person[i] = new Card();
person[i].setCard(card[count].color, card[count].digital);
sumPersonPoint += function.cardDigitalConvert(person[i].getCardDigital());
System.out.print("玩家的第 "+(i+1)+" 张纸牌是:");
System.out.print(person[i].getCard());
count++;
countPerson++;
computer[i] = new Card();
computer[i].setCard(card[count].color, card[count].digital);
sumComputerPoint
+=
function.cardDigitalConvert(computer[i].getCardDigital());
庄家的第 "+(i+1)+" 张纸牌是:");
System.out.print("
System.out.println(computer[i].getCard());
count++;
countComputer++;
}
System.out.print("玩家的当前点数:"+sumPersonPoint);
System.out.println("
庄家的当前点数:"+sumComputerPoint);
while(countPerson < 5){
System.out.println("还要继续要牌按 H,停止要牌按 S");
ch = reader.next();
if(ch.equals("H") || ch.equals("h")){
person[countPerson] = new Card();
person[countPerson].setCard(card[count].color, card[count].digital);
sumPersonPoint
+=
function.cardDigitalConvert(person[countPerson].getCardDigital());
System.out.print("玩家的第 "+(countPerson+1)+" 张纸牌是:");
System.out.println(person[countPerson].getCard());
count++;
countPerson++;
System.out.print("玩家的当前点数:"+sumPersonPoint);
System.out.println("
if(sumPersonPoint > 21){
庄家的当前点数:"+sumComputerPoint);
System.out.println("玩家爆掉了!!!");
flagPerson = false;
break;
}
}
if(ch.equals("S") || ch.equals("s")){
System.out.println("玩家听牌!!!");
break;
}
}
while(countComputer < 5){
if(sumComputerPoint < 18){
computer[countComputer] = new Card();
computer[countComputer].setCard(card[count].color,
card[count].digital);
sumComputerPoint
+=
function.cardDigitalConvert(computer[countComputer].getCardDigital());
System.out.print("庄家的第 "+(countComputer+1)+" 张纸牌是:");
System.out.println(computer[countComputer].getCard());
count++;
countComputer++;
System.out.print("玩家的当前点数:"+sumPersonPoint);
System.out.println("
庄
当
家
的
前
点
数:"+sumComputerPoint);
if(sumComputerPoint > 21){
System.out.println("庄家爆掉了!!!");
flagComputer = false;
break;
}
}
else{
if(function.cardJudge(sumPersonPoint, sumComputerPoint) == -1)
break;
else{
card[count].digital);
computer[countComputer] = new Card();
computer[countComputer].setCard(card[count].color,
sumComputerPoint
+=
function.cardDigitalConvert(computer[countComputer].getCardDigital());
System.out.print("庄家的 第 "+(countComputer+1)+" 张纸牌
是:");
System.out.println(computer[countComputer].getCard());
count++;
countComputer++;
System.out.print("玩家的当前点数:"+sumPersonPoint);
数:"+sumComputerPoint);
System.out.println("
庄 家 的 当 前 点
if(sumComputerPoint > 21){
System.out.println("庄家爆掉了!!!");
flagComputer = false;
break;
}
}
}
}
if(flagPerson==false&&flagComputer==false){
System.out.println("玩家和庄家都爆掉了,庄家赢了!!!");
}
else if(flagPerson==false&&flagComputer==true){
System.out.println("玩家爆掉了,庄家赢了!!!");
}
else if(flagPerson==true&&flagComputer==false){
System.out.println("庄家爆掉了,玩家赢了!!!");
}
else{
if(function.cardJudge(sumPersonPoint, sumComputerPoint)==1){
System.out.println("玩家点数大于庄家点数,玩家赢!!!");
}
else if(function.cardJudge(sumPersonPoint, sumComputerPoint)==1){
System.out.println("玩家和庄家点数相同,平局!!!");
}
else if(function.cardJudge(sumPersonPoint, sumComputerPoint)==-1){
System.out.println("玩家点数小于庄家点数,庄家赢!!!");
}
}
}
//边界
}