程序设计实践-21点赌博游戏

软件工程专业《程序设计实践》实践教学环节大纲

一、学时、学分

课程总学时:32                   实践学时:32

课程总学分:1                   实践学分:1

二、适用专业及年级

软件工程专业各方向,二年级

三、实践教学目标与要求

进一步了解第三学期所学高级语言课程的语法知识,熟练掌握各种语句的应用,能够综合应用数据结构及第三学期高级语言课程所学知识完成课程设计任务。旨在进一步培养学生的软件思维,重点是锻炼学生的编程能力,为后续课程的学习打下扎实的基础。

四、实践内容与要求

实 践 内 容

要  求

学时

1

编程实现“21点”扑克牌游戏:计算机作为庄家,1人参与游戏。游戏使用一副牌(除了大小王),游戏者的目标是使手中牌的点数之和不超过21点且尽量大。扑克牌点数的计算规则:各花色2至9牌,按其原点数计算;K、Q、J和10牌都算作10点;A 牌(ace)既可算作1点也可算作11点,由玩家自己决定(当玩家停牌时,点数一律视为最大而尽量不爆,如A+9为20,A+4+8为13,A+3+A视为15)。开局时,给玩家发两张明牌,给庄家发一张明牌和一张暗牌,接下来庄家和玩家可以依次确定是否拿牌(只要庄家的点数不大于11点,则必须拿牌,如果超过11点,可以考虑不同的点数设置不同的阈值,如果大于阈值则继续拿牌),直到庄家和玩家都不拿牌,本局游戏结束,最接近且不超过21点的为赢家。

能够根据问题正确抽象出包含哪些对象,并声明相应的类,结合Java的基本语法模拟实现该游戏。

32

五、教学形式及所需的主要仪器设备和消耗品

一周的集中实践课,采取专题讨论与答疑辅导相结合的方式。实验环境为:安装了32位或64位windows系统、内存不小于4G的计算机。

六、实践教学指导书

1. Java程序设计教程与上机实验,第1版,边金良孙红云,ISBN:9787115382221, 人民邮电出版 ,2015.5

2. Java 程序设计基础(第4版)实验指导,第4版,邹林达陈国君,ISBN:9787302352792,清华大学出版 ,2014.3.

七、考核方式及成绩评定

采取实践任务完成质量+考勤相结合的考核方式,其中完成质量占比80%,平时考勤占比20%。

八、其它必要的说明

填写实验 告,包括课程信息、学生信息、实验任务、实验源代码;实践课程所完成的程序需归档留存。

程序设计实践课程实验 告

软件工程专业《程序设计实践》实践教学环节大纲

一、学时、学分

课程总学时:32                   实践学时:32

课程总学分:1                   实践学分:1

二、适用专业及年级

软件工程专业各方向,二年级

三、实践教学目标与要求

进一步了解第三学期所学高级语言课程的语法知识,熟练掌握各种语句的应用,能够综合应用数据结构及第三学期高级语言课程所学知识完成课程设计任务。旨在进一步培养学生的软件思维,重点是锻炼学生的编程能力,为后续课程的学习打下扎实的基础。

四、实践内容与要求

实 践 内 容

要  求

学时

1

编程实现“21点”扑克牌游戏:计算机作为庄家,1人参与游戏。游戏使用一副牌(除了大小王),游戏者的目标是使手中牌的点数之和不超过21点且尽量大。扑克牌点数的计算规则:各花色2至9牌,按其原点数计算;K、Q、J和10牌都算作10点;A 牌(ace)既可算作1点也可算作11点,由玩家自己决定(当玩家停牌时,点数一律视为最大而尽量不爆,如A+9为20,A+4+8为13,A+3+A视为15)。开局时,给玩家发两张明牌,给庄家发一张明牌和一张暗牌,接下来庄家和玩家可以依次确定是否拿牌(只要庄家的点数不大于11点,则必须拿牌,如果超过11点,可以考虑不同的点数设置不同的阈值,如果大于阈值则继续拿牌),直到庄家和玩家都不拿牌,本局游戏结束,最接近且不超过21点的为赢家。

能够根据问题正确抽象出包含哪些对象,并声明相应的类,结合Java的基本语法模拟实现该游戏。

32

五、教学形式及所需的主要仪器设备和消耗品

一周的集中实践课,采取专题讨论与答疑辅导相结合的方式。实验环境为:安装了32位或64位windows系统、内存不小于4G的计算机。

六、实践教学指导书

1. Java程序设计教程与上机实验,第1版,边金良孙红云,ISBN:9787115382221, 人民邮电出版 ,2015.5

2. Java 程序设计基础(第4版)实验指导,第4版,邹林达陈国君,ISBN:9787302352792,清华大学出版 ,2014.3.

七、考核方式及成绩评定

采取实践任务完成质量+考勤相结合的考核方式,其中完成质量占比80%,平时考勤占比20%。

八、其它必要的说明

填写实验 告,包括课程信息、学生信息、实验任务、实验源代码;实践课程所完成的程序需归档留存。

姓名

班级

实验目的与要求

深刻理解面向对象编程思想,熟悉类的声明、属性的声明、方法的定义、对象的创建与使用等语法知识,能够根据具体问题完成对象的抽象、类的定义及程序的编写,初步体验面向对象编程的优点。

实验内容

编程模拟实现四个人玩21点扑克牌游戏,程序应实现随机洗牌,顺序发牌,每个玩家可以选择要或不要,如果所有玩家都不要牌,则程序自动计算每个玩家的点数,不超过21点且最接近的玩家为赢家。

计分规则:2点至10点的牌以牌面的点数来相加,J、Q、K 每张为10点。A可记为1点或为11点,若玩家会因A而爆牌则A可算为1点。

答辩分数

 

答辩记录及评价

答辩记录:

1. 该程序抽象了哪些类,其具体的作用是什么br> 此程序为二十一点人机对战,其中有四个类一个接口.

1.Gameble赌局类(测试类)包含play()方法 这个方法将整场赌局组织起来。

2.Player玩家类 实现Judge接口 重写了judgeString()方法用来判断扑克牌的值 与judgeNeedOrNot( )方法 玩家手动选择是否需要。

3.Banker庄家(机器)类 实现了Judge接口 重写了judgeString()方法用来判断值与judgeNeedOrNot()方法根据阈值自动判断是否需要。

4.Poker扑克类 包含了1.一副扑克52张牌  2.show()方法 向你展示这一副牌是否有问题3.cutcards()方法 使用随机数将整个牌打乱  deal()发牌方法 实现顺牌

5.Judge判断接口 包含 judgeString() 判断值的方法,judgeNeefOrNot

判断要不要的方法

2.    substring()的作用/p>

substring(int beginIndex)是截取字符串的一个方法,从该字符串的索引处的字符开始,直到此字符串的末尾,最后返回一个新的字符串。

 

评价:

代码实现基本符合要求,抽象也相对到位,抽象到了接口。

对subString()方法理解不够,对代码熟悉度不够高。

/*除此之外还引发了在赌博上学习机器的想法,正在试验中*/

实现代码

 

 

package赌神三战拉斯维加斯;

import java.util.Random;

import java.util.Scanner;

//赌局类 测试类

public class Gameble {

    Scannersc=new Scanner(System.in);

    intwin=0;//为了改进计算胜率

    intlose=0;

   

    publicstaticvoid main(String args[]){

       Gameblestart=new Gameble();

       start.play();

      

    }

    publicvoid play(){

       intp=0;

       intb=0;

      

       Stringp1;

       Stringp2;

      

       Stringb1;

       Stringb2;

      

       booleanPneed=true;//玩家是否需要

       booleanBneed=true;//机器是否需要

       booleanPgo=true;//玩家能否继续要牌

       booleanBgo=true;//机器能否继续要牌

       booleanp1judge=true;//检测玩家牌1 是否测试过

       booleanp2judge=true;//检测玩家牌2 是否测试过

       booleanb1judge=true;//检测机器牌1 是否测试过

       booleanb2judge=true;//检测机器牌2 是否测试过

      

       Poker card=new Poker();

       Banker BB=new Banker();

       Player PP=new Player();

       card.cutcards();

       System.out.println(发牌时间:);

       p1=card.deal();

       b1=card.deal();

       p2=card.deal();

       p=BB.judgeString(p1)+BB.judgeString(p2);//机器计算你的值你想知道自己的自己计算

       b2=card.deal();

       b=BB.judgeString(b1)+BB.judgeString(b2);

       System.out.println(玩家开局两张:+p1+”  “+p2);

       System.out.println(机器开局两张牌+” * “+b2);

      while(Pgo||Bgo){//解决的依次发牌问题

           System.out.println(玩家是否要牌:(Y/N)”);

           Pneed=PP.judgeNeedOrNot(b,p);

       if(Pneed&&Pgo){

           String p3=card.deal();

           p=p+BB.judgeString(p3);//机器又开始计算了

           System.out.println(玩家收到一张牌+p3);

           Pgo=true;

           if(p>21){

              if(BB.judgeString(p3)==11){

                  p=p-10;

                  Pgo=true;

              }//主要是会重复检测这几张牌所以需要只使用一次

              //最后解决的11点问题

              elseif(BB.judgeString(p2)==11&&p2judge){

                  p=p-10;

                  Pgo=true;

                  p2judge=false;

              }

              elseif(BB.judgeString(p1)==11&&p1judge){

                  p=p-10;

                  Pgo=true;

                  p1judge=false;

              }

           else{

              System.out.println(玩家点数大于21);

              System.out.println(“GameOver 机器胜利);

              lose++;

              break;

              }  

          }  

       }

       else{

           Pgo=false;

       }  

 

   

       System.out.println(机器是否要牌:);

       Bneed=BB.judgeNeedOrNot(b, p);

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年1月13日
下一篇 2018年1月13日

相关推荐