java设计简单的21点游戏

合集下载

二十一点小游戏(HTML游戏使用JavaScript开发)

二十一点小游戏(HTML游戏使用JavaScript开发)

二十一点小游戏(HTML游戏使用JavaScript开发)HTML游戏使用JavaScript开发已经成为一种流行的趋势,其中二十一点小游戏是一种简单而有趣的游戏。

在这个小游戏中,玩家需要通过抽取数字卡片的方式来接近或者达到21点的总和。

以下是对这款游戏的简要介绍,包括游戏规则、开发过程和功能设计。

一、游戏规则1. 玩家可以选择抽取一张数字卡片或者停止抽取。

2. 玩家根据手中卡片的总和来判断是否获胜。

3. 如果玩家手中卡片的总和超过21点,则游戏失败。

4. 如果玩家手中卡片的总和等于21点,则游戏胜利。

5. 在游戏中,A的点数可以是1或者11,J、Q、K的点数均为10。

二、开发过程在开发二十一点小游戏时,我们需要使用HTML、CSS和JavaScript来实现游戏的界面和逻辑。

1. HTML部分首先,我们需要设计出游戏的界面。

可以使用HTML5的语义化标签来构建游戏画面的各个部分,例如头部、主体和底部。

并且使用CSS来设置样式,使得游戏界面看起来更加美观。

2. JavaScript部分在实现游戏逻辑时,我们需要使用JavaScript来处理用户的交互和计算卡片的点数总和。

2.1 定义卡片对象使用JavaScript定义一个卡片对象,包含点数和花色两个属性。

每次抽卡时,可以从预先定义好的一组卡片中随机抽取一张。

2.2 玩家抽取卡片当玩家点击抽取按钮时,JavaScript会随机抽取一张卡片,并根据抽取的结果更新玩家的手牌。

2.3 计算点数总和通过遍历玩家的手牌数组,计算出玩家手中所有卡片的点数总和。

需要注意A的处理,根据手中的其他卡片决定A是1还是11。

2.4 判断胜负根据点数总和判断玩家是胜利、失败还是继续游戏。

如果点数总和超过21点,游戏失败。

如果点数总和等于21点,游戏胜利。

三、功能设计为了增加游戏的趣味性和可玩性,可以在二十一点小游戏中添加以下功能:1. 游戏计分记录玩家的胜利次数和失败次数,并在界面上显示。

21点游戏课程设计

21点游戏课程设计

/*玩家最多可以要5张牌,但是如果牌的点数之和超过21,则自动出局,在不超过21点的情况下,玩与庄家比牌的点数大小,大者为赢家。

*/#include <iostream>#include <cstdlib>#include <ctime>using namespace std;class CCard{private:int naPip[5]; //定义一个数组,一共是5张牌。

int nNumber; //发了多少张牌。

int nDollar; //有多少钱int nGamble; //赌注int nWin; //赢局数int nLose; //输局数int nDraw; //输局数public:CCard(); //构造函数void FirstPlayTwo();//最初两张牌int GetNumber();//返回牌张数int GetPip(); //返回点数void DisplayPip();//一次全部显示牌面点数。

void DisplayPip(int ); //除了第一张牌,一次全部显示牌面点数(针对计算机牌的显示)void TurnPlay();//出了一张牌void Win();//赢了计算赌注void Lose();//输了void Draw();//平局int setGamble(int );//设置赌注,赌本不够返回1int getMoney();//返回钱数void DisplayInfo();//打印必要的信息int GetCurrentCard();//返回当前牌点。

};CCard::CCard(){nNumber=0;//开始没有发牌nDollar=100;//初始赌本为0for(int i=0;i<5;i++)naPip[i]=0; //五张牌全部为0nGamble=0;nWin=nLose=nDraw=0; //没输没赢没有平局}int CCard::getMoney(){return nDollar;}void CCard::DisplayInfo()//打印相关信息。

Java实训报告纸牌游戏黑杰克

Java实训报告纸牌游戏黑杰克

《Java实训》设计报告纸牌游戏黑杰克专业:软件技术班级:09-23班学号:*********姓名:***石家庄科技信息职业学院信息工程系2011年10月15日项目简介纸牌游戏黑杰克一、项目需求黑杰克简称为21点,1700年左右法国赌场就有这种21点的纸牌游戏。

该游戏由 2 到 6 个人玩,使用除大小王之外的52 张牌,游戏者的目标是使手中的牌的点数之和不超过21 点且尽量大。

有着悠久的历史。

发牌:一开始给每个玩家发一张牌,这张牌是底牌,只有玩家自己知道是什么,然后只发给要牌的玩家。

如果所有玩家都不再要牌,则开牌计分。

计分:2到10都是按牌面计算点数,直接累加。

J、Q、K按10点计算,A一般记作11点累加,此时如果点数大于21点则将A记作1点。

爆分:21点为最大点数值,如果玩家手中的牌点数大于21点,则属于爆分,玩家手中点数将归0,判定为输。

要牌:玩家在底牌之后可以继续要牌,知道点数满意或爆分为止。

下注:玩家在每局开局前可下注,定当前局输赢的钱数。

输赢:21点位最大点数,哪个玩家点数大,就哪个玩家赢。

二、项目设计下面是5个Java源文件的总体设计。

(1)BlackJack.java(主类)BlackJack 类负责创建主窗口,该类含有main方法,游戏从该类开始执行。

BlackJack类有5种类型的对象,分别是:Dealer,Scanner,Player,Computer,Card,对象。

(2)Card.java对于一张扑克牌来说,主要有牌面值及花色,Card类用faces数组及suits数组分别存储所有牌面值及花色,并提供了getFace()方法及getSuit()方法获取一张扑克的面值及花色信息。

(3)CardsInHand.java玩家手上的牌。

(4)Dealer.java荷官的抽象只是实现了两个较核心的能力,一个是发牌,一个是洗牌。

发牌涉及到一个随机算法的问题,是比较重要的运算处理。

(5)Player.java玩家类的抽象是非常明显的,完全模拟了现实中一个玩家的属性及行为,属性有:赢次数、输次数、拥有现金数、手上的牌。

21点游戏java实现

21点游戏java实现

21点游戏java实现21点的基本知识21点是世界上⽐较流⾏的扑克游戏项⽬除掉⼤⼩王的⼀副扑克牌,共计52张牌21点不区分花⾊,其中A----10均代表扑克牌本⾝的点数J Q K代表10点区分庄家和闲家,其中闲家可以优先要牌⽽庄家在与闲家点数⼀样⼤的情况下,庄家赢,当有⼀⽅点数超过21点则另⼀⽅⾃动获胜,庄家的点数如果正好是21点,那么庄家直接获胜,其他情况以点数⼤的获胜流程设计:⼈机对战模式!1由⽤户输⼊选择作庄还是作闲,电脑⾃动成为另⼀⽅2随机为双⽅发两张牌3询问闲家是否要牌,⼀直到闲家不再要或者发⽣暴点为⽌4询问庄家要牌,⼀直到庄家不再要或者暴点或者正好21点为⽌5⽐较游戏输赢6询问是否继续7统计战果技术问题:1.发牌的时候随机发取2.发牌出来还要判断是否本张牌已经发过了!如果已经发过了,那么就要重新随机发另外⼀张牌,要保证牌的唯⼀性3.当给电脑派牌的时候要考虑AI的问题!让电脑的逻辑稍微模拟⼈的思维主类:import java.util.Scanner;public class CardTest {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int win = 0;int lose = 0;while (true) {System.out.println("请问做庄家1/闲家2?");int num = sc.nextInt();if (num == 1) {System.out.println("你选择做庄家");Ruler r = new Ruler();int n=r.play();if(n==0) {//庄家赢win++;}elselose++;} else if (num == 2) {System.out.println("你选择做闲家");Player p = new Player();int n= p.play();if(n==1) {//闲家赢win++;}elselose++;} else {System.out.println("输⼊错误,重新输⼊");}System.out.println("是否继续Y/N");if (sc.next().charAt(0) == 'Y')continue;else {System.out.println("游戏结束");System.out.println("赢:"+win);System.out.println("输:"+lose);break;}}}}import java.util.Random;public class Card {int index = 0; // 发牌索引下标String[] card = { "红桃A", "红桃2", "红桃3", "红桃4", "红桃5", "红桃6", "红桃7", "红桃8","红桃9", "红桃10", "红桃J", "红桃Q", "红桃K","⿊桃A","⿊桃2", "⿊桃3", "⿊桃4", "⿊桃5", "⿊桃6", "⿊桃7", "⿊桃8", "⿊桃9", "⿊桃10", "⿊桃J", "⿊桃Q", "⿊桃K","梅花A", "梅花2", "梅花3","梅花4", "梅花5", "梅花6", "梅花7", "梅花8", "梅花9", "梅花10", "梅花J", "梅花Q", "梅花K", "⽅⽚A", "⽅⽚2", "⽅⽚3", "⽅⽚4", "⽅⽚5", "⽅⽚6", "⽅⽚7", "⽅⽚8", "⽅⽚9", "⽅⽚10", "⽅⽚J", "⽅⽚Q", "⽅⽚K", };public void show() {for (int i = 0; i < 52; i++) {System.out.println(card[i]);}}// 洗牌,打乱牌的顺序public void cutcards() {int index=0;Random rand = new Random();for (int i = 0; i < 52; i++) {int n = rand.nextInt(52);String temp;temp = card[n];card[n] = card[51 - n];card[51 - n] = temp;}}// 发牌,按顺序发牌,从下标0开始public String deal() {String c = card[index];index++;return c;}}public class JudgeNum {public int judgeString(String num) {String word= num.substring(2);if(word.equals("A")) {return 1;}else if(num.substring(2).equals("J")||num.substring(2).equals("Q")||num.substring(2).equals("K")||num.substring(2).equals("10")) {return 10;}else {int n=(int)num.substring(2).charAt(0)-48;return n;}}}import java.util.Random;import java.util.Scanner;public class Player {/** 选择做闲家先得牌您选择: 闲家发牌时间:闲家:红桃K ⽅⽚3庄家:⿊桃6 梅花4* 闲家要牌时间:闲家是否要牌(Y/N)?Y发牌:⿊桃A* 闲家是否要牌(Y/N)?Y 发牌:梅花5 闲家是否要牌(Y/N)?N 闲家不再要牌:闲家点数:19点庄家要牌时间:庄家要牌:梅花5* 庄家要牌:⿊桃4庄家不再要牌:庄家点数19点庄赢****/Scanner sc= new Scanner(System.in);public int play() {int playernum=0;int rulernum=0;String player1;String player2;String ruler1;String ruler2;JudgeNum judge = new JudgeNum();Card c = new Card();c.cutcards();player1 = c.deal();player2 = c.deal();System.out.println("发牌时间:");System.out.println("闲家:" + player1 + " " + player2);playernum=judge.judgeString(player1)+judge.judgeString(player2); ruler1 = c.deal();ruler2 = c.deal();System.out.println("庄家:" + ruler1 + " " + ruler2);rulernum=judge.judgeString(ruler1)+judge.judgeString(ruler2);System.out.println("闲家点数:"+playernum);System.out.println("庄家点数:"+rulernum);System.out.println("闲家要牌时间: " );//循环要牌阶段while(true) {System.out.println("闲家是否要牌(Y/N)? " );char w = sc.next().charAt(0);if(w=='Y') {System.out.println("闲家继续要牌");String player3=c.deal();System.out.println("闲家: "+player3 );playernum=playernum+judge.judgeString(player3);System.out.println("闲家点数:"+playernum);if(playernum>21){System.out.println("闲家爆掉,庄家赢");return 0;}}else if(w=='N') {System.out.println("闲家不再要牌,闲家点数:"+playernum);break;}}System.out.println("庄家要牌时间");while(true) {if(rulernum>=playernum) {System.out.println("庄家不再要牌,庄家赢");return 0;}else {System.out.println("庄家要牌时间:");String ruler3=c.deal();System.out.println("庄家:"+ruler3);rulernum=rulernum+judge.judgeString(ruler3);if(rulernum>21) {System.out.println("庄家点数"+rulernum);System.out.println("庄家爆掉,闲家赢");return 1;}else if(rulernum>=playernum) {System.out.println("庄家点数:"+rulernum+" 闲家点数:"+playernum); System.out.println("庄家赢");return 0;}}}}}import java.util.Scanner;public class Ruler {// 选择做庄家/** 闲家先要牌**/Scanner sc = new Scanner(System.in);public int play() {int playernum = 0;int rulernum = 0;String player1;String player2;String ruler1;String ruler2;JudgeNum judge = new JudgeNum();Card c = new Card();c.cutcards();player1 = c.deal();player2 = c.deal();System.out.println("发牌时间:");System.out.println("闲家:" + player1 + " " + player2);playernum = judge.judgeString(player1) + judge.judgeString(player2); ruler1 = c.deal();ruler2 = c.deal();System.out.println("庄家:" + ruler1 + " " + ruler2);rulernum = judge.judgeString(ruler1) + judge.judgeString(ruler2);System.out.println("闲家点数:" + playernum);System.out.println("庄家点数:" + rulernum);System.out.println("闲家要牌时间:");while (true) {String player3;if (playernum <rulernum) {System.out.println("闲家要牌");player3 = c.deal();System.out.println("闲家:" + player3);playernum = playernum + judge.judgeString(player3);} else if (playernum > 21) {System.out.println("闲家点数:" + playernum);System.out.println("闲家爆掉,庄家赢");return 0;} else if (playernum >= 15) {System.out.println("闲家不再要牌");System.out.println("闲家点数" + playernum);break;}else {System.out.println("闲家要牌");String player4 = c.deal();System.out.println("闲家:" + player4);playernum=playernum+judge.judgeString(player4);if (playernum > 21) {System.out.println("闲家点数:" + playernum);System.out.println("闲家爆掉,庄家赢");return 0;}}}// 庄家要牌时间System.out.println("庄家要牌时间:");while (true) {System.out.println("庄家是否要牌(Y/N)");char w = sc.next().charAt(0);if (w == 'Y') {System.out.println("庄家继续要牌");String ruler3 = c.deal();System.out.println("庄家: " + ruler3);rulernum = rulernum + judge.judgeString(ruler3);System.out.println("庄家点数:" + rulernum);if (rulernum > 21) {System.out.println("庄家爆掉,闲家赢");return 1;}} else if (w == 'N') {System.out.println("庄家不再要牌,庄家点数:" + rulernum); break;}}if (rulernum >= playernum) {System.out.println("庄家赢");return 0;} else {System.out.println("闲家赢");return 1;}}}。

21点小游戏

21点小游戏
}
if(sum==w){
g.drawString("庄家和你一样大~你输了~",200,380);
}
if(sum<w){
g.drawString("庄家比你大~你输了~",200,380);
I[9]=Toolkit.getDefaultToolkit().getImage("th.gif");
I[10]=Toolkit.getDefaultToolkit().getImage("jh.gif");
I[11]=Toolkit.getDefaultToolkit().getImage("qh.gif");
public void windowActivated(WindowEvent e) {
}
public void windowClosed(WindowEvent e) {
}
public void windowClosing(WindowEvent e) {
e.getWindow().dispose();
I[6]=Toolkit.getDefaultToolkit().getImage("7h.gif");
I[7]=Toolkit.getDefaultToolkit().getImage("8h.gif");
I[8]=Toolkit.getDefaultToolkit().getImage("9h.gif");
for(i=0;i<2;i++)
{
k[i]=Math.abs(r.nextInt()%13);

21点JAVA游戏程序课程设计实验报告

21点JAVA游戏程序课程设计实验报告
教师评价
评定项目
A
B
C
D
评定项目
A
B
C
D
算法正确
界面美观,布局合理
程序结构合理
操作熟练
语法、语义正确
解析完整
实验结果正确
文字流畅
报告规范
题解正确
其他:
评价教师签名:
年月日
finalJButton button =newJButton();
button.addActionListener(newActionListener() {
publicvoidactionPerformed(finalActionEvent arg0) {
onClick();
}
});
button.setText("出牌");
number=this.randNumber();
this.sum+=number;
label.setText(""+number);
String strTemp =bel_1.getText();
strTemp +=""+number+" ";
label_1.setText(strTemp);
label.setFont(newFont("", Font.BOLD, 26));
label.setText("背面");
label.setBounds(158, 81, 137, 153);
getContentPane().add(label);
label_1.setText("你已经拥有的牌:");

21点游戏实验报告

实验一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 youxi21dian;import java.util.Scanner;import java.util.Random;public class Dian21 {/*** @param args*/static int bb[]=new int[52];static String aa[]=new String[52];static Scanner s=new Scanner(System.in);static Random r=new Random();static int s1=0,s2=0,p=0;//同意发排,s1,s2表示甲方和乙方的最后点数public static void main(String[] args) {// TODO Auto-generated method stubfor(int i=0;i<52;i++)bb[i]=i%13+1;for(int i=0;i<13;i++)aa[i]="红桃"+(i+1);for(int i=13;i<26;i++)aa[i]="黑桃"+(i%13+1);for(int i=26;i<39;i++)aa[i]="方片"+(i%13+1);for(int i=39;i<52;i++)aa[i]="梅花"+(i%13+1);System.out.println("欢迎使用游戏21点!");System.out.println("请选择盘点方:0甲方,1 乙方!");int f=s.nextInt();if(f==0)System.out.println("您为:甲方;对方为:乙方!");else System.out.println("您为:乙方;对方为:甲方!");xipai();System.out.println("现在开始发牌!");int j=1,y=1;fapai(j,y);while(j==1||y==1){System.out.println("如果需要发牌请按1!若不需要请按0!");System.out.print("甲方请选择:");int a=s.nextInt();j=a;System.out.print(" 乙方请选择:");int b=s.nextInt();y=b;System.out.println("");fapai(j,y);}System.out.println("结果为:");result();}//洗牌public static void xipai(){int t;String l;for(int m=0;m<1000;m++){int i=r.nextInt(51);t=bb[i];bb[i]=bb[51-i];bb[51-i]=t;l=aa[i];aa[i]=aa[51-i];aa[51-i]=l;}}//发牌public static void fapai(int j,int y){if(j==1){System.out.print("甲方为: ");System.out.print(aa[p]);System.out.println(" "+"点数为:"+" "+bb[p]);s1=s1+bb[p++];}else System.out.println("甲方不需要发牌!");if(y==1){System.out.print("乙方为: ");System.out.print(aa[p]);System.out.println(" "+"点数为:"+" "+bb[p]);s2=s2+bb[p++];}else System.out.println("乙方不需要发牌!");}//结果public static int result(){System.out.print("甲方点数为: "+s1);System.out.println(" 乙方点数为: "+s2);if(s1>21&&s2>21){System.out.println("双方点数均超过21点,都被爆掉了!平局!");return 0;}if(s1>21&&s2<=21){System.out.println("甲方点数超过21点,被爆掉了!乙方胜!");return 0;}if(s2>21&&s1<=21){System.out.println("乙方点数超过21点,被爆掉了!甲方胜!");return 0;}if(s2>s1){System.out.println("乙方胜!");return 0;}else if(s2==s1){System.out.println("平局!");return 0;}else {System.out.println("甲方胜!");return 0;}}}结果为:欢迎使用游戏21点!请选择盘点方:0甲方,1 乙方!1您为:乙方;对方为:甲方!现在开始发牌!甲方为: 梅花13 点数为: 13乙方为: 梅花12 点数为: 12如果需要发牌请按1!若不需要请按0!甲方请选择:1乙方请选择:1甲方为: 梅花11 点数为: 11乙方为: 红桃4 点数为: 4如果需要发牌请按1!若不需要请按0!甲方请选择:0乙方请选择:0甲方不需要发牌!乙方不需要发牌!结果为:甲方点数为: 24 乙方点数为: 16甲方点数超过21点,被爆掉了!乙方胜!。

数学建模纸牌游戏21点(蒙特卡罗法)


If SUM1=21&&UM2≠21,则玩家赢, 得分SCORE=3; If (SUM2=21&&SUM2≠21) or (21>SUM2>SUM1),则庄家赢,得分 SCORE=-2; If 21>SUM1>SUM2 则玩家赢,得 分SCORE=2; If 21>SUM1=SUM2 则为平局, SCORE =0. • 第16步 输出得分SCORE. 停止.
• • • • • • • • •
else if 21>totw && totw==totz SCORE=0; end end end end end fprintf('玩家得分SCORE=%d\n',SCORE); 保存为dian21.m
• function [num,p,a]=choose(num,p,a) • while 1 • m=fix(rand(1)*8)+1; • n=fix(rand(1)*13)+1; • if a(m,n)==1 • a(m,n)=0; • num=num+1; • if n==1 • if num<21 • n=11; • end • end
• 第5步 判断y1的值,若>10,则将其值改 为10,并重新计算SUM2. • 第6步 判断y2的值,若>10,则将其值改 为10,并重新计算SUM2. • 第7步 判断x1的值是否为1,若等于1将其 值改为11,重新计算SUM1,并判断SUM1 是否大于21,若大于21则将x1改为1,并重 新计算SUM1,若没有大于21则继续第9步; 若x1不为1,直接进行第9步.
二.Matlab程序
• • • • • • • • • function y=dian21() a=ones(8,13); %产生8*13的矩阵 numz=0; numw=0; pz=[]; pw=[]; totz=0; %庄家总点数 totw=0; %玩家总点数 [numz,pz,a]=choose(numz,pz,a);

21点游戏java课程设计

21点游戏java课程设计一、课程目标知识目标:1. 掌握Java语言基础,包括变量定义、数据类型、运算符和条件语句;2. 学会使用Java面向对象编程,包括类的定义、对象的创建与使用;3. 理解21点游戏的规则,并能用Java编写出完整的游戏逻辑。

技能目标:1. 培养学生运用Java语言解决问题的能力,特别是逻辑思维和编程技巧;2. 提高学生面向对象编程的实践能力,使其能够独立设计和实现小型的应用程序;3. 培养学生通过编写代码来解决实际问题的能力,例如设计并实现21点游戏。

情感态度价值观目标:1. 培养学生对编程的兴趣,激发其学习Java的热情;2. 培养学生的团队协作精神,使其在项目开发过程中学会沟通与协作;3. 培养学生面对困难时的耐心和毅力,使其在编程过程中保持积极的态度。

本课程针对高中年级学生,结合学科特点和教学要求,设计出具有实用性和趣味性的21点游戏Java课程。

通过本课程的学习,学生将能够掌握Java编程基础,提高编程实践能力,并在游戏中体验编程的乐趣,培养团队协作和解决问题的能力。

同时,课程目标分解为具体的学习成果,便于后续教学设计和评估。

二、教学内容1. Java基础:- 变量定义、数据类型、常量与变量- 运算符、表达式、流程控制(if、switch、for、while)- 函数定义、调用、重载2. 面向对象编程:- 类的定义、属性、方法- 对象的创建、使用、生命周期- 封装、继承、多态3. 21点游戏规则与逻辑:- 游戏规则介绍- 游戏流程分析- 游戏逻辑实现(洗牌、发牌、计分等)4. Java编程实践:- 编写类和对象实现游戏功能- 设计用户界面与交互- 调试与优化代码教学内容根据课程目标进行科学性和系统性的组织,与教材相关章节紧密结合。

具体教学大纲如下:第1周:Java基础学习,掌握变量定义、数据类型、运算符等基本概念;第2周:学习流程控制,理解函数定义和调用;第3周:面向对象编程,了解类与对象的基本概念;第4周:深入学习封装、继承、多态等面向对象特性;第5周:介绍21点游戏规则,分析游戏流程;第6周:编写游戏逻辑,实现洗牌、发牌等基本功能;第7周:设计用户界面,实现用户与游戏的交互;第8周:课程总结,调试优化代码,展示作品。

java的21点游戏课程设计

java的21点游戏课程设计一、课程目标知识目标:1. 学生理解类和对象的基本概念,掌握Java面向对象编程的基本语法和结构;2. 学生掌握21点游戏的基本规则,并能将其转化为程序逻辑;3. 学生了解并能运用随机数生成器和条件语句来实现游戏功能。

技能目标:1. 学生能运用所学知识独立设计并编写简单的Java程序,实现21点游戏的模拟;2. 学生通过编程实践,提高问题分析、程序设计和调试的能力;3. 学生能通过小组合作,有效沟通,共同完成项目任务。

情感态度价值观目标:1. 学生培养对编程的兴趣,激发学习Java的热情;2. 学生养成积极思考、主动探索的良好学习习惯;3. 学生在团队合作中学会尊重他人,培养协作精神和集体荣誉感。

课程性质:本课程为实践性强的编程课程,旨在通过设计21点游戏,让学生将所学Java知识应用于实际项目中,提高编程能力和团队合作能力。

学生特点:学生已具备一定的Java基础,对面向对象编程有一定了解,但实践经验不足,需通过实际项目来提高。

教学要求:注重理论与实践相结合,强调动手实践,培养学生编程思维和解决问题的能力。

通过小组合作,提高学生沟通协作能力,同时关注学生情感态度的培养。

在教学过程中,将课程目标分解为具体的学习成果,以便进行有效的教学设计和评估。

二、教学内容1. 面向对象编程基础:- 类的定义与对象创建- 成员变量与局部变量- 方法的定义与调用- 封装与访问控制符- 继承与多态2. 21点游戏规则与逻辑:- 游戏规则介绍- 游戏流程控制- 随机数生成器- 条件语句与循环语句的应用3. 编程实现21点游戏:- 设计游戏类和对象- 编写游戏逻辑代码- 异常处理与调试技巧- 小组合作与分工4. 教学内容安排与进度:- 第一课时:面向对象编程基础回顾,介绍21点游戏规则- 第二课时:设计游戏类和对象,编写基本游戏逻辑- 第三课时:实现随机数生成器,完善游戏逻辑- 第四课时:异常处理与调试,小组合作完成项目5. 教材章节关联:- 《Java编程思想》第3章:对象与类- 《Java编程思想》第4章:继承- 《Java编程思想》第5章:接口与多态- 《Java核心技术》第6章:异常、断言和日志教学内容以确保学生掌握Java面向对象编程基础为前提,结合21点游戏项目,使学生能够将所学知识应用于实际项目中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学号11710115
天津城建大学
Java 语言程序设计C
实验报告
实验1:21点游戏
学生姓名路江飞
班级11卓越七班
一、实验内容
1.掌握使用Java语言进行结构化程序设计;
2.熟悉Java基本语法,基本数据类型,各种运算符及表达式的使用,掌握运算符优先级,熟悉使用Java的选择语句,循环语句。

3.熟悉Eclipse开发环境,编写简单的Application程序,并编译和执行。

二、实验要求
1.调试程序、编译,运行后得到正确的结果;
2.写出实验报告,要求记录编译和执行Java程序当中的系统错误信息提示,并给出解决办法。

三、实验结果
package 游戏;
import java.util.Random;
import java.util.Scanner;
public class Youxi {
/**
* @param args
*/
// TODO Auto-generated method stub
public static void show(){//具有菜单形式的界面
System.out.println("**************************");
System.out.println("* 欢迎使用21点游戏*");
System.out.println("**************************");
}
public static void shuffle(int a[] ){// 洗牌模块
int temp,j,k=1;
for(int i=0;i<=51;i++){
a[i]=k;
if((i+1)%4==0 )k++;
}
a[52]=14;
a[53]=15;
Random r=new Random();
for(j=0;j<=10000;j++){
int n=r.nextInt(54);
int m=r.nextInt(54);
temp=a[n];
a[n]=a[m];
a[m]=temp;
}
}
public static int person(int a[] ){//计算玩家的点数和
int p=1,j,t=1,sum=0;
System.out.print("可以开始了吗?(1号键开始游戏):");
while(p==1){
Scanner r=new Scanner(System.in);
int q=r.nextInt();
if(q!=1)
System.out.print("输入有误,请重新输入:");
else p=0;
}
for(j=0;t==1;j=j+2){
if(a[j]==14)
System.out.print("您拿到小王,");
if(a[j]==15)
System.out.print("您拿到大王,");
if(a[j]<14)
System.out.print("本次发的牌是"+a[j]+"点,");
sum+=a[j];
if(a[j]==14||a[j]==15){
sum-=a[j];
System.out.print("请输入您想要的点数(1点到13点):");
Scanner input=new Scanner(System.in);
int h=input.nextInt();
System.out.print("本次发的牌是"+h+"点,");
sum+=h;
}
if(sum>21){
System.out.print("现在是"+sum+"点,");
break;
}
System.out.print("现在是"+sum+"点,");
System.out.print("还要继续吗(继续请按1,退出请按2):");
Scanner input1=new Scanner(System.in);
int c=input1.nextInt();
if(c==1)
t=1;
else t=0;
}
return sum;
}
public static int computer(int a[] ){ //计算电脑的点数和int t1=1,j,sum=0;
for(j=1;t1==1;j=j+2){
sum+=a[j];
if(a[j]==14||a[j]==15){
sum-=a[j];
Random y=new Random();
int b=y.nextInt(13);
sum+=b;
}
if(sum>15)break;
}
return sum;
}
public static void Judge(int a[],int sum,int sum1 ){ //判定输赢
if(sum>sum1&&sum<=21&&sum1<=21)
System.out.println("恭喜您,胜利了!");
else if(sum<sum1&&sum<=21&&sum1<=21)
System.out.println("很遗憾,您失败了!");
else if (sum==sum1&&sum<=21&&sum1<=21)
System.out.println("平局!");
else if(sum<=21&&sum1>21)
System.out.println("恭喜您,胜利了!");
else if(sum>21&&sum1<=21)
System.out.println("很遗憾,您失败了!");
else if (sum>21&&sum1>21)
System.out.println("您和电脑都爆了,平局!");
}
public static void main(String[] args) {
int i,t=1,sum1,sum,a[]=new int[54];
show(); //具有菜单形式的界面
for(i=0;t==1;i++){
shuffle(a); //洗牌
sum1=computer(a); //电脑的点数和
sum=person(a); //玩家的点数和
System.out.print("您的点数为:"+sum+" ");
if(sum1>21)
System.out.println("电脑的点数为"+sum1+" ");
else
System.out.println("电脑的点数为:"+sum1);
Judge(a,sum,sum1); //判断输赢
System.out.print("还要继续玩游戏吗(继续请按1,退出请按2):");
Scanner input=new Scanner(System.in);
int k=input.nextInt();
if(k==1)t=1;
else t=0;
}
}
}
运行结果:
四、遇到的问题以及解决方案
1.随机数的产生:
Random r=new Random();
Int x=r.nextInt(n);//n代表产生的随机数在[0,n-1]之间。

2.利用随机数完成洗牌模块:
Random r=new Random();
for(j=0;j<=10000;j++){
int n=r.nextInt(54);
int m=r.nextInt(54);
temp=a[n];
a[n]=a[m];
a[m]=temp;
}
3.机器的智能化实现:当电脑的点数和大于15点后,电脑将不再要牌。

相关文档
最新文档