用汇编语言实现21点游戏基本功能
- 格式:pdf
- 大小:93.38 KB
- 文档页数:9
二十一点小游戏(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. 游戏计分记录玩家的胜利次数和失败次数,并在界面上显示。
C语言21点游戏#include#include#include#include#includeint Bookies_score=1000,/*庄家金币*/Rlayer_score=1000;//玩家金币int Bookiesscore=0,/*庄家当前点数*/Rlayerscore=0;//玩家当前点数int Random,/*玩家随机数*/Randoms;//庄家随机数int Bets_P;//玩家下注int Card;//是否发牌int i=1;int s=1;int main(void){Star_interface();//开始界面getch();system("CLS");//---------------------------------以下为产生玩家随机数发牌代码Judge_WorL();//输或者赢函数}//------------以下开始界面int Star_interface(){int i;system("color 9B");printf("\t\t\t C语言游戏:二十一点\n");printf("\n\n\n\n\n\n\n");printf(" 〓〓〓〓〓〓〓〓");printf("\n 〓\n 〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n 〓\n 〓\n");printf(" 〓〓〓〓〓〓〓〓\n");printf("\n\n");printf("\t\t\t ①:查看规则②:开始游戏\n\n");printf("\t\t\t 制作人:小二\n\n");printf("\t\t\t 版本号:1.0\n\t\t\t");scanf("%d",&i);switch(i){case 1:system("CLS");printf("\t\t\t 二十一点游戏规则\n\n\n\t 介绍:手中所有的牌点数之和不超过21点,谁更接近21点,就赢得游戏。
《C语言课程设计》题目:程序设计基础课程设计班级:姓名:指导教师:所属系部:电子科学与技术系2009年 6 月24 日21点游戏设计1 游戏规则此游戏,原则上是可以由不限定的人数来玩,但是随着参与人数的增加,在最后成绩的比较方面会比较的繁琐,不像两个人之间的比赛结果那么明显,所以也应该将参与人数控制在一定的范围之内。
确定参与人数后,系统会随机为每个人发三张牌,然后计算这三张牌的和进行比较。
如果这三张牌的和大于21,则此人将会输掉比赛,除非其他人的和也大于21(即假若每个人的三张牌的和都大于21时,该局为平局,打成平手)。
如果有的和大于21,有的和小于21,则大于21的人输掉比赛,再比较小于21的部分,谁的三张牌的和最接近21,则谁是该局的赢家。
一局玩完后,玩者可以根据自己情况进行选择是否要再玩一局。
若选择再玩时,系统会再进行下一次的循环。
2 程序算法○1由系统随机产生几组随机数,每组3个随机数。
○2计算每一组的三个随机数的和。
○3比较每组和的大小。
○4得出比赛结果3 关键算法流程图总体框架4 程序代码/* Note:Your choice is C IDE */#include <stdlib.h>#include <stdio.h>#include <time.h>#define N 5main( ){int i,t,flag, j,m;int b[8],a[3*N];char c;b[1]=0;flag=1;while (flag) //控制循环{srand(time(NULL)); /scanf("%d",&j); //用j控制组数for(t=0;t<3*j;t++) //产生几组随机数{if (t%3==0)printf("\n");a[t]=rand()%13+1;printf("%5d",a[t]);}printf("\n");for(i=1;i<=j;i++) //求每组随机数的和{for(t=3*(i-1);t<3*i;t++)b[i]=b[i]+a[t];printf("b[%d]=%d\n",i,b[i]);b[i+1]=0;}printf("\n");{for(t=1;t<j;t++) //对和的大小进行排序for(i=1;i<=j-t;i++)if(b[i]>b[i+1]){m=b[i+1];b[i+1]=b[i];b[i]=m;}for (i=1;i<=j;i++)printf("%5d",b[i]);}printf("\n");for (i=1;i<=j;i++) //得出结论if(b[i]>21){printf("这一局为第%d个人赢\n是否再玩一局,若输入'Y'则继续游戏,输入'N'结束游戏\n",i-1);getchar(); //与while语句是一个系统c=getchar();if(c=='Y')flag=1;elseflag=0;}}}5在程序设计中,出现的问题和解决方案:由于是多组数据之间的比较,首先在同时产生几组随机数时遇到障碍,产生随机数的代码是从网上搜索得到的,再加上一些修改,达到所需的要求,同时有一些小的细节是在老师帮助下完成的。
【实验名称】用汇编语言实现21点游戏基本功能【实验目的】熟悉汇编语言的基本用法【实验内容】准确判断任意牌型的大小,辨认玩家与庄家的输赢情况;累计玩家各牌局的输赢比和详细记录。
【实验步骤】提要:a)每次发牌时随机单张产生A~Kb)A记1点c)在给游戏者发牌前,游戏者可增加奖励或扣除的积分d)用屏幕显示当前牌点情况和操作信息,然后用键盘输入游戏者的操作流程:1.给参加游戏的人基本积分为1002.首先电脑自身产生一张底牌(显示)3.给参加游戏的人发一张牌4.询问游戏者是否要牌,若不要牌,则跳转到第9步5.重复第3个步骤6.计算牌点的和(J、Q、K记为10点,2~10分别记2~10点)7.若牌点和最小值大于21点,跳转第14步骤8.重复步骤4~79.判断电脑自身的牌点最大是否大于游戏者,若大于,则跳转第14步骤10.电脑自身再发一张牌(显示)11.重复第6步骤12.若牌点和最小大于21点,跳转第15步骤13.重复步骤9~1214.提示电脑赢的信息,扣除游戏者积分10分,跳转第16步骤15.提示游戏者赢的信息,奖励游戏者积分10分16.显示电脑底牌和当前游戏者剩余积分17.询问是否继续玩下一盘,若要重复2~1718.结束子程序调用:流程图:【实验程序】DATA SEGMENTBUFF1DB'****************************************'DB''DB'Welcome you to run this game!'DB''DB'****************************************','$' N DB?JIFEN DB?DIPAI DB?PAIDIAN DB?QH1DB?QH2DB?SH DB'10','$'JK DB'PEI LV(10OR5)?','$'MESSAGE0DB'DOU YOU WANT TO MORE?','$'MESSAGE1DB'************YOU WIN!************','$'MESSAGE2DB'************YOU LOST!************','$'MESSAGE3DB'Go on or not?','$'MESSAGE4DB'This is dipai:','$'MESSAGE5DB'This is JIFEN:','$'MESSAGE6DB'******THE GAME IS OVER!******','$'MESSAGE7DB0AH,0DH,'This is your PAIDIAN:','$'DATA ENDSSTACK SEGMENT STACKDW256DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXBEGIN:CALL XX0A1:MOV JIFEN,50A2:CALL RANDMOV DIPAI,BLCALL CHULIMOV QH1,BLJB1:CALL XXMOV AH,0INT16HCMP AL,59HJE JICALL XX21MOV N,5JMP A3JI:MOV N,10CALL XX20A3:CALL RANDCALL XX19MOV PAIDIAN,BLCALL DISP0CALL CHULIMOV QH2,BLCALL XX4A4:MOV AH,0INT16HCMP AL,4EHJE HCCMP AL,59HJNE A4A5:CALL RANDCALL XX19MOV PAIDIAN,BLCALL DISP0CALL CHULIA6:ADC QH2,BLA7:CMP QH2,21JA A14CALL XX4A8:JMP A4ZZ:CALL XX0JMP A2HC:CALL RETURNA9:MOV AL,QH2CMP QH1,ALJA A14A10:CALL RANDMOV PAIDIAN,BLCALL DISP0CALL CHULIA11:ADC QH1,BLA12:CMP QH1,21JA A15A13:JMP A9A14:CALL XX14CALL JIANCMP JIFEN,10JB A18JMP A16A15:CALL XX15CALL JIAA16:CALL XX16MOV AL,DIPAIMOV PAIDIAN,ALCALL DISP0CALL DISP1A17:CALL XX17 AG:MOV AH,0INT16HCMP AL,59hJE ZZCMP AL,4EHJE A18JNE AGA18:CALL XX18MOV AH,4CHINT21HRAND PROCPUSH CXPUSH DXPUSH AXSTIMOV CX,0FFFFH YS:DEC CXJNE YSMOV AH,0INT1AHMOV AX,DXAND AH,3MOV DL,13DIV DLMOV BL,AHADC BL,1POP AXPOP DXPOP CXRETRAND ENDPDISP0PROCCALL SPACECALL SPACECALL SPACEMOV AL,PAIDIANCMP AL,9JA OTHERCMP AL,1JE AADD AL,30HT:MOV DL,ALMOV AH,2INT21HRETOTHER:CMP AL,10JE SHICMP AL,11JE JCMP AL,12JE QMOV AL,4BHJMP TJ:MOV AL,4AHJMP TQ:MOV AL,51HJMP TA:MOV AL,41HJMP TSHI:LEA DX,SHMOV AH,09HINT21HRETDISP0ENDPDISP1PROCLEA DX,MESSAGE5MOV AH,9INT21HMOV AL,JIFENCMP AL,100JB MMMOV CL,100CBWDIV CLMOV BL,AHOR AL,30HMOV DL,ALMOV AH,2INT21HMOV AL,BL MM:MOV CL,10CBWDIV CLMOV DL,ALMOV AH,2INT21HMOV DL,30HMOV AH,2INT21HRETDISP1ENDPJIAN PROCCMP N,10JA XSBB JIFEN,10JMP TU1X:SBB JIFEN,20 TU1:RETJIAN ENDPJIA PROCCMP N,10JA YADC JIFEN,10JMP TUY:ADC JIFEN,20 TU:RETJIA ENDPXX PROCLEA DX,JKMOV AH,9INT21HRETXX ENDPXX0PROCMOV AX,0600HMOV CX,0000HMOV DX,184FHMOV BH,07HINT10HMOV AH,02HMOV DH,5MOV DL,15MOV BH,00HINT10HLEA DX,BUFF1INT21HCALL RETURNRETXX0ENDPXX4PROCCALL RETURNLEA DX,MESSAGE0MOV AH,09INT21HRETXX4ENDPXX14PROCCALL RETURNLEA DX,MESSAGE2MOV AH,9INT21HRETXX14ENDPXX15PROCCALL RETURNLEA DX,MESSAGE1MOV AH,9INT21HRETXX15ENDPXX16PROCCALL RETURNlea dx,MESSAGE4MOV AH,9INT21HRETXX16ENDPXX17PROCCALL RETURNLEA DX,MESSAGE3MOV AH,9INT21HCALL RETURNRETXX17ENDPXX18PROCLEA DX,MESSAGE6MOV AH,9INT21HRETXX18ENDPSPACE PROCMOV DL,20HMOV AH,2INT21HRETSPACE ENDPCHULI PROCCMP BX,10JB DMOV BX,10D:ADD BX,0RETCHULI ENDPRETURN PROCMOV AH,2MOV DL,0AHINT21HMOV DL,0DHINT21HRETRETURN ENDPXX19PROCLEA DX,MESSAGE7MOV AH,9INT21HRETXX19ENDPXX20PROCCALL SPACEMOV DL,59HMOV AH,2INT21HCALL SPACERETXX20ENDPXX21PROCCALL SPACEMOV DL,4EHMOV AH,2INT21HCALL SPACERETXX21ENDPRETCODE ENDSEND START。
1.1 问题描述本次C++课程设计题目是“21点纸牌游戏”,系统的主要功能是娱乐游戏,有电脑和玩家一起玩这个游戏,玩家设法使自己的牌达到总分21并要比电脑开的点数大而且不超过这个数值。
扑克牌的分值取它们的面值。
J,Q,K 分别是5,6和6分。
1.2 要求分析编写程序实现游戏,该程序是模拟古老的21点扑克牌游戏,实现1对1的人机大战。
要求游戏过程中任意一方牌的点数之和超过21点,则自动出局;在不超过21点的情况下,玩家下注由电脑随机发牌与庄家比累积牌的点数的大小,大者为赢家。
2 总体设计2.1 总体功能框图2.2主要算法流程图3. 详细设计程序流程图。
图2-1 算法流程图3程序清单及注释// 21点游戏.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"#include<iostream>#include<math.h>#include<time.h>using namespace std;int x=1;int mima;int rand(int n ); //声明bool win();bool win1();bool win2();//定义变量win为逻辑型变量void money(); //运行赌注int main(){cout<<"\t※※※※※※※※※※欢迎进入21点※※※※※※※※※※\n\n";cout<<"\t\t 游戏规则:\n";cout<<endl;cout<<"\t\t 1.玩家最多可下赌注1~100;\n";cout<<endl;cout<<"\t\t 2.如果牌点数的总数超过21点则暴点,自动判数;\n";cout<<endl;cout<<"\t\t 3.计算机方在大于等于16点时不再要牌。
public partial class Form1 : Form{public int a;public int b;public int i;public int[] ab = new int[12];//数组ab存放临时的牌的图片号public int zhuangnumber;//用于存放庄家点数public int gamernumber;//用于存放游戏者点数public PictureBox[] ptb = new PictureBox[12];public Form1(){InitializeComponent();}//生成牌与点数private void First(out int a, out int b, int q){Random rd = new Random();a = rd.Next(0, 51);if (a >= 0 && a <= 3){b = 2;}else if (a >= 4 && a <= 7)b = 3;}else if (a >= 8 && a <= 11) {b = 4;}else if (a >= 12 && a <= 15) {b = 5;}else if (a >= 16 && a <= 19) {b = 6;}else if (a >= 20 && a <= 23) {b = 7;}else if (a >= 24 && a <= 27) {b = 8;}else if (a >= 28 && a <= 31) {b = 9;}else if (a >= 32 && a <= 47) {b = 10;}else if (a >= 48 && a <= 51) {if (q >= 0 && q <= 21) {b = 10;}elseb = 1;}else{b = 0;Console.Read();}//用递归算法随即生成之前未出现的牌public void Bijiao(out int a, out int b, int q, int[] abc) {int i;Random rd = new Random();a = rd.Next(0, 51);if (a >= 0 && a <= 3){b = 2;}else if (a >= 4 && a <= 7){b = 3;}else if (a >= 8 && a <= 11){b = 4;}else if (a >= 12 && a <= 15){b = 5;}else if (a >= 16 && a <= 19){b = 6;}else if (a >= 20 && a <= 23){b = 7;}else if (a >= 24 && a <= 27){b = 8;}else if (a >= 28 && a <= 31){b = 9;}else if (a >= 32 && a <= 47){b = 10;else if (a >= 48 && a <= 51){if (q >= 0 && q <= 21){b = 10;}elseb = 1;}else{b = 0;Console.Read();}for (i = 0; i < 52; i++){if (abc[i] == a)Bijiao(out a, out b, q,abc);elsebreak;}}//不要牌后比较出赢家并把庄家隐藏的牌显现private void buttonResult_Click(object sender, EventArgs e){if (zhuangnumber > gamernumber){for (i = 1; i < 6; i++){if (ab[i] != 100)this.ptb[i].Image = this.imageList1.Images[ab[i]];}bel2.Text = zhuangnumber.ToString();MessageBox.Show("庄家赢了!开始下一局!");}else if (zhuangnumber == gamernumber){for (i = 1; i < 6; i++){if(ab[i]!=100)this.ptb[i].Image = this.imageList1.Images[ab[i]];}bel2.Text = zhuangnumber.ToString();MessageBox.Show("庄家赢了!开始下一局!");}else{for (i = 1; i < 6; i++){if (ab[i] != 100)this.ptb[i].Image = this.imageList1.Images[ab[i]];}bel2.Text = zhuangnumber.ToString();MessageBox.Show("你赢了!开始下一局!");}}private void结束ToolStripMenuItem_Click(object sender, EventArgs e){Application.Exit();}//游戏规则在第二个Form上private void游戏规则ToolStripMenuItem_Click(object sender, EventArgs e){Form2 myform = new Form2();myform.Show();}//开始在panel上添加PictureBox并设置其属性,生成四张牌,各两张(庄家有一张隐藏)private void开始ToolStripMenuItem_Click_1(object sender, EventArgs e){for (i = 0; i < 12; i++){this.ptb[i] = new PictureBox();this.ptb[i].SizeMode = PictureBoxSizeMode.CenterImage;this.ab[i] = new int();this.ptb[i].Visible = true;ab[i] = 100;//初始化数组abthis.ptb[i].Image = this.imageList1.Images[52];//初始化PicturBox 的图片 }for (i = 0; i < 6; i++){this.panelT.Controls.Add(this.ptb[i]);this.ptb[i].Width = 85;this.ptb[i].Height = 120;this.ptb[i].Top = 11;this.ptb[i].Left = 17 + 85 * i + 15 * (i + 1);}for (i = 6; i < 12; i++){this.panelB.Controls.Add(this.ptb[i]);this.ptb[i].Width = 85;this.ptb[i].Height = 120;this.ptb[i].Top = 11;this.ptb[i].Left = 17 + 85 * (i - 6) + 15 * (i - 5); }bel2.Visible = true;ble4.Visible = true;First(out a, out b, zhuangnumber);zhuangnumber = b;this.ptb[0].Image = this.imageList1.Images[a];ab[0] = a;First(out a, out b, gamernumber);if (ab[0] == a){while (ab[0] == a){First(out a, out b, gamernumber);}gamernumber = b;this.ptb[6].Image = this.imageList1.Images[a];ab[6] = a;}else{gamernumber = b;this.ptb[6].Image = this.imageList1.Images[a];ab[6] = a;}First(out a, out b, zhuangnumber);if (ab[0] == a || ab[1] == a){while (ab[0] == a || ab[1] == a){First(out a, out b, zhuangnumber);}zhuangnumber = zhuangnumber + b;ab[1] = a;}else{zhuangnumber = zhuangnumber + b;ab[1] = a;}bel2.Text = "未知!";First(out a, out b, gamernumber);if (ab[0] == a || ab[1] == a || ab[2] == a){while (ab[0] == a || ab[1] == a || ab[6] == a){First(out a, out b, gamernumber);}gamernumber = gamernumber + b;this.ptb[7].Image = this.imageList1.Images[a];ab[7] = a;}else{gamernumber = gamernumber + b;this.ptb[7].Image = this.imageList1.Images[a];ab[7] = a;}ble4.Text = gamernumber.ToString();}//要的牌必须是未出现的牌,接着检测是否有点数爆了private void buttoninfo_Click(object sender, EventArgs e) {Bijiao(out a,out b,zhuangnumber,ab);for (i = 1; i < 5; i++){if (ab[i] != 100 && ab[i + 1] == 100){ab[i + 1] = a;break;}}zhuangnumber = zhuangnumber + b;bel2.Text = "未知!";Bijiao(out a, out b, gamernumber, ab);for (i = 7; i < 11; i++){if (ab[i] != 100 && ab[i + 1] == 100){ab[i+1] = a;this.ptb[i+1 ].Image = this.imageList1.Images[ab[i+1]];break;}}gamernumber = gamernumber + b;ble4.Text = gamernumber.ToString();if (zhuangnumber > 21 && gamernumber > 21){for (i = 1; i < 6; i++){if (ab[i] != 100)this.ptb[i].Image = this.imageList1.Images[ab[i]];}bel2.Text = zhuangnumber.ToString();MessageBox.Show("平局!开始下一局!");}else if (zhuangnumber > 21){for (i = 1; i < 6; i++){if (ab[i] != 100)this.ptb[i].Image = this.imageList1.Images[ab[i]];}bel2.Text = zhuangnumber.ToString();MessageBox.Show("庄家爆了!你赢了!开始下一局!");}else if (gamernumber > 21){for (i = 1; i < 6; i++){if (ab[i] != 100)this.ptb[i].Image = this.imageList1.Images[ab[i]];}bel2.Text = zhuangnumber.ToString();MessageBox.Show("你爆了!庄家赢了!开始下一局!");}}//洗牌,界面为初始界面private void button1_Click(object sender, EventArgs e){for (i = 0; i < 12; i++){this.ptb[i].Visible = false; }bel2.Visible = false;ble4.Visible = false;}}。
设计题目: 21点游戏二十一点游戏是一款操作简单,老少皆宜,并且带有很强娱乐性的游戏。
二十一点游戏也是我们学习C语言过程中用来锻炼我们编程能力的一种简单有效的方式。
编写二十一点游戏的目的就是在编写过程中学习和掌握各种编程的能力,二十一点游戏中有我们经常接触到的一些头文件,和小的函数体,以及一些相关知识,能让我们在实践中得到锻炼。
一、设计目的与要求1、程序设计的源程序功能如下:(1)将所有的函数与相应的数据封装到类中,并改写主程序,使程序简化。
(2)程序中一共有13张扑克牌可以随机抽取,大于10的点数为10,现要求大于10的点数全部为半点。
(3)要求庄家永远不会暴庄,即庄家可以查看下一张牌,若大于21点,则拒绝,当然,在游戏规则上不能泄露这点秘密。
(4)高级玩家可以查看下一张牌,即按h键,然后按要求输入密码,密码正确可以看牌,并决定是否要牌。
(5)每次要牌后可以设定赔率,即如果开始下的是10元钱的注,如果牌好,你可以要求再下注,当然不能超过你所有的总钱数。
(6)将界面的提示说明改成中文界面,界面的解释详细友好,可以吸引更多的玩家。
二、课程设计(1)题目要求把源程序封装在类中,需要编写一个类来封装所有相关函数和变量,同时对main主函数进行改写,以完成题目的要求。
(2)题目要求把抽到的大于10点的牌的点数设为半点,只需要设计随机取下一张牌的成员函数时用if语句判定牌的点数是否大于10,大于10的牌对其重新赋值为0.5即可。
(3)题目要求超级玩家在输入密码后可以查看下一张牌,只需设计一成员函数,判定玩家是否继续要牌之前加入对玩家是否输入h键的判定,如果有输入,则调用为处理玩家输入密码而单独编写的成员函数,在该函数中,首先判定玩家的密码输入是否正确,不正确则返回0,正确则返回1。
(4)题目要求玩家可以根据手上的牌决定是否下注,只需设计一成员函数,检查玩家的赌注累计不超过他所拥有的总资本。
三、设计描述1、为满足上述第一条要求,在程序中增加了一个类play,封装到类中的函数有:void replay(); //检测是否重玩void hitplayer(); //玩家要牌void hitcpu();//电脑要牌void deal(); //开始发牌void BET(); //加注void print(); //打印最终结果void rules(); //显示规则void results();//判断获胜方int getmoney();//读取钱数至主程序void shuruans();//输入判断用字符(如Y,S等)void firstbet();//首次下注;void writer(void) ; //写入文本文件void load(void); //读取文本文件源程序已有的函数中,void replay(),void rules(), void results(), void print()已经较为完善,仅需将其英文界面部分改为中文即可,而其他函数则应按要求改写。
【实验名称】用汇编语言实现21点游戏基本功能【实验目的】熟悉汇编语言的基本用法【实验内容】准确判断任意牌型的大小,辨认玩家与庄家的输赢情况;累计玩家各牌局的输赢比和详细记录。
【实验步骤】提要:a)每次发牌时随机单张产生A~Kb)A记1点c)在给游戏者发牌前,游戏者可增加奖励或扣除的积分d)用屏幕显示当前牌点情况和操作信息,然后用键盘输入游戏者的操作流程:1.给参加游戏的人基本积分为1002.首先电脑自身产生一张底牌(显示)3.给参加游戏的人发一张牌4.询问游戏者是否要牌,若不要牌,则跳转到第9步5.重复第3个步骤6.计算牌点的和(J、Q、K记为10点,2~10分别记2~10点)7.若牌点和最小值大于21点,跳转第14步骤8.重复步骤4~79.判断电脑自身的牌点最大是否大于游戏者,若大于,则跳转第14步骤10.电脑自身再发一张牌(显示)11.重复第6步骤12.若牌点和最小大于21点,跳转第15步骤13.重复步骤9~1214.提示电脑赢的信息,扣除游戏者积分10分,跳转第16步骤15.提示游戏者赢的信息,奖励游戏者积分10分16.显示电脑底牌和当前游戏者剩余积分17.询问是否继续玩下一盘,若要重复2~1718.结束子程序调用:流程图:【实验程序】DATA SEGMENTBUFF1DB'****************************************'DB''DB'Welcome you to run this game!'DB''DB'****************************************','$' N DB?JIFEN DB?DIPAI DB?PAIDIAN DB?QH1DB?QH2DB?SH DB'10','$'JK DB'PEI LV(10OR5)?','$'MESSAGE0DB'DOU YOU WANT TO MORE?','$'MESSAGE1DB'************YOU WIN!************','$'MESSAGE2DB'************YOU LOST!************','$'MESSAGE3DB'Go on or not?','$'MESSAGE4DB'This is dipai:','$'MESSAGE5DB'This is JIFEN:','$'MESSAGE6DB'******THE GAME IS OVER!******','$'MESSAGE7DB0AH,0DH,'This is your PAIDIAN:','$'DATA ENDSSTACK SEGMENT STACKDW256DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXBEGIN:CALL XX0A1:MOV JIFEN,50A2:CALL RANDMOV DIPAI,BLCALL CHULIMOV QH1,BLJB1:CALL XXMOV AH,0INT16HCMP AL,59HJE JICALL XX21MOV N,5JMP A3JI:MOV N,10CALL XX20A3:CALL RANDCALL XX19MOV PAIDIAN,BLCALL DISP0CALL CHULIMOV QH2,BLCALL XX4A4:MOV AH,0INT16HCMP AL,4EHJE HCCMP AL,59HJNE A4A5:CALL RANDCALL XX19MOV PAIDIAN,BLCALL DISP0CALL CHULIA6:ADC QH2,BLA7:CMP QH2,21JA A14CALL XX4A8:JMP A4ZZ:CALL XX0JMP A2HC:CALL RETURNA9:MOV AL,QH2CMP QH1,ALJA A14A10:CALL RANDMOV PAIDIAN,BLCALL DISP0CALL CHULIA11:ADC QH1,BLA12:CMP QH1,21JA A15A13:JMP A9A14:CALL XX14CALL JIANCMP JIFEN,10JB A18JMP A16A15:CALL XX15CALL JIAA16:CALL XX16MOV AL,DIPAIMOV PAIDIAN,ALCALL DISP0CALL DISP1A17:CALL XX17 AG:MOV AH,0INT16HCMP AL,59hJE ZZCMP AL,4EHJE A18JNE AGA18:CALL XX18MOV AH,4CHINT21HRAND PROCPUSH CXPUSH DXPUSH AXSTIMOV CX,0FFFFH YS:DEC CXJNE YSMOV AH,0INT1AHMOV AX,DXAND AH,3MOV DL,13DIV DLMOV BL,AHADC BL,1POP AXPOP DXPOP CXRETRAND ENDPDISP0PROCCALL SPACECALL SPACECALL SPACEMOV AL,PAIDIANCMP AL,9JA OTHERCMP AL,1JE AADD AL,30HT:MOV DL,ALMOV AH,2INT21HRETOTHER:CMP AL,10JE SHICMP AL,11JE JCMP AL,12JE QMOV AL,4BHJMP TJ:MOV AL,4AHJMP TQ:MOV AL,51HJMP TA:MOV AL,41HJMP TSHI:LEA DX,SHMOV AH,09HINT21HRETDISP0ENDPDISP1PROCLEA DX,MESSAGE5MOV AH,9INT21HMOV AL,JIFENCMP AL,100JB MMMOV CL,100CBWDIV CLMOV BL,AHOR AL,30HMOV DL,ALMOV AH,2INT21HMOV AL,BL MM:MOV CL,10CBWDIV CLMOV DL,ALMOV AH,2INT21HMOV DL,30HMOV AH,2INT21HRETDISP1ENDPJIAN PROCCMP N,10JA XSBB JIFEN,10JMP TU1X:SBB JIFEN,20 TU1:RETJIAN ENDPJIA PROCCMP N,10JA YADC JIFEN,10JMP TUY:ADC JIFEN,20 TU:RETJIA ENDPXX PROCLEA DX,JKMOV AH,9INT21HRETXX ENDPXX0PROCMOV AX,0600HMOV CX,0000HMOV DX,184FHMOV BH,07HINT10HMOV AH,02HMOV DH,5MOV DL,15MOV BH,00HINT10HLEA DX,BUFF1INT21HCALL RETURNRETXX0ENDPXX4PROCCALL RETURNLEA DX,MESSAGE0MOV AH,09INT21HRETXX4ENDPXX14PROCCALL RETURNLEA DX,MESSAGE2MOV AH,9INT21HRETXX14ENDPXX15PROCCALL RETURNLEA DX,MESSAGE1MOV AH,9INT21HRETXX15ENDPXX16PROCCALL RETURNlea dx,MESSAGE4MOV AH,9INT21HRETXX16ENDPXX17PROCCALL RETURNLEA DX,MESSAGE3MOV AH,9INT21HCALL RETURNRETXX17ENDPXX18PROCLEA DX,MESSAGE6MOV AH,9INT21HRETXX18ENDPSPACE PROCMOV DL,20HMOV AH,2INT21HRETSPACE ENDPCHULI PROCCMP BX,10JB DMOV BX,10D:ADD BX,0RETCHULI ENDPRETURN PROCMOV AH,2MOV DL,0AHINT21HMOV DL,0DHINT21HRETRETURN ENDPXX19PROCLEA DX,MESSAGE7MOV AH,9INT21HRETXX19ENDPXX20PROCCALL SPACEMOV DL,59HMOV AH,2INT21HCALL SPACERETXX20ENDPXX21PROCCALL SPACEMOV DL,4EHMOV AH,2INT21HCALL SPACERETXX21ENDPRETCODE ENDSEND START。