用汇编语言实现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. 游戏计分记录玩家的胜利次数和失败次数,并在界面上显示。

C语言21点游戏

C语言21点游戏

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语言课程设计实现21点游戏

C语言课程设计实现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点游戏基本功能

用汇编语言实现21点游戏基本功能

【实验名称】用汇编语言实现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。

21点游戏编程

21点游戏编程
int CCard::super()
{
char password2[20]="super";
char str[20];
do{
char ch;
int i=0;
cout<<"\n请您输入密码,按回车键结束:"<<endl;
cout.flush();
ch=getch();
void deal(float &player,float&cpu,int &playerturns,int &cputurns);
void hit(float &total);
void hit2(float &total);
void hit3(float &total);
void BET(int &bet,int &money);
game.replay(ans);
}while((ans=='y')||(ans=='Y'));
game.print(win,lose,draw,money);
cout<<endl;
cout<<"\t\t\t\t";
return(0);
}
//------------------------------------------------------------------------
{
return(0);
}
cout<<"如果您是普通玩家,请按1."<<endl; //不同的玩家选择不同的游戏模式

C++21点游戏设计

C++21点游戏设计

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点时不再要牌。

C语言二十一点纸牌游戏系统详细设计样本

C语言二十一点纸牌游戏系统详细设计样本
nCpuTurns=0,nMoney=0,nBet;
/* nPlayer--玩家手中所有牌点数和,nPlayerTurns--玩家手中牌数量*/
char chAnswer;
char mmm;
a;
system("cls");/*执行系统命令"清屏"*/
Rules_f();
printf("确认与否开始游戏:");
{
int nRan;
srand((unsigned)time(NULL));
nRan=rand()%(lBigNumber-(lSmallNumber-1))+lSmallNumber;
return(nRan);
}
void Hit_f2(int * npTotal,int a) /*发一张牌,返回点数之和*/
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void Wait_f(int);
void Pause_f();/*暂停,按任意键继续*/
int Random_f(long ,long );/*返回两个参数之间随机数*/
void Replay_f(char *);/*询问与否重开一局*/
图2.4在作弊模式下取胜,可以接着要牌,但玩家牌最多不能超过5张,取胜后会记录成果,询问与否继续游戏
2.5非作弊模式
图2.5此状况为非作弊模式,不能见庄家牌,只能懂得成果,输掉游戏后记录成果,询问与否继续
2.6退出游戏
图2.6此为退出游戏,输入后自动关闭窗口
3.源程序:
#include<time.h>

HDL语言实验课8--简化的21点(无作业要求)

HDL语言实验课8--简化的21点(无作业要求)

5

Zju-HPEC Lab
饮料销售机
实验结果:
© Zhejiang University
6
Zju-HPEC Lab
Thanks!
© Zhejiang University
hdl语言实验课8简化的21点无作业要求要求实验语言21点简化的21简化的hdl语言实验课的hdl作业课课清
Zju-HPEC Lab
HDL Language Lab 8— 简化的21点(无作业要求)
Zju-HPEC Lab
简化的21点
21点是一种扑克游戏。2~10的牌取值与面值 相同,J,Q,K面值也是10。A可以是11或1 。总分尽量接近又不超过21就算赢家。
© Zhejiang University
2
Zju-HPEC Lab
简化的21点
系统框图:
我们的程序,当牌面值超过17时就不再叫牌。
© Zhejiang University
3
Zju-HPEC Lab
简化的21点
输入输出定义: Card_rdy_i:输入牌有效(高电平); Card_value_i:输入牌点数(4bit); Request_card_o:叫牌; Lost_o:牌面点数已经超过21点,已经输了; Done_o:牌面点数超过17点,但小于21点。不 再继续叫牌;
© Zhejiang University
4
Zju-HPEC Lab
简化的21点
提示: 当总点数不超过17点就继续叫牌; Ace首先当做11点,如果总点数超过21点就把 ace当做1点计算; 可以用 2 + {$random}%(10);产生2~11的随机 数。
© Zhejiang University

c#小游戏21点代码和界面

c#小游戏21点代码和界面

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语言程序

21点  高质量C语言程序

设计题目: 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点的思路

编程算21点的思路

编程算21点的思路全文共四篇示例,供读者参考第一篇示例:21点(也称为Blackjack或Pontoon)是一种非常流行的纸牌游戏,通常在赌场中出现。

21点的玩法简单而刺激,玩家只需尽量接近21点,同时不要超过,就能获得胜利。

在这篇文章中,我们将探讨如何使用编程来模拟21点游戏的规则和策略,以及如何实现一个简单的21点游戏。

让我们梳理一下21点游戏的规则。

在21点中,每张牌的点数分别为1至10,J、Q、K的点数为10,A的点数为1或11,玩家和庄家每人发两张牌,玩家可以选择继续要牌或停牌,庄家必须一直要牌直到点数达到17或更高。

如果玩家的点数超过21点,则庄家获胜;如果玩家点数等于21点,则玩家获胜;如果庄家点数超过21点,则玩家获胜;如果庄家点数大于或等于玩家点数且不超过21点,则庄家获胜。

在实现21点游戏的编程思路中,我们首先需要定义每张牌的点数,并确定牌堆中的牌。

通过创建一个列表或字典来表示牌堆,可以很方便地实现抽牌的功能。

接着,我们需要编写代码来模拟发牌和计算点数的过程,可以根据每张牌的点数来累加玩家和庄家的点数,同时进行判断胜负的逻辑。

在21点游戏中,玩家的策略也非常重要。

一般来说,玩家应该根据自己的点数和庄家的明牌来决定是否要牌。

如果庄家的明牌是A或10,玩家应该保持谨慎,并考虑是否尽早停牌;如果玩家的点数接近21点,则尽量避免要牌,以免爆牌。

这些策略也可以通过编程来实现,编写代码来模拟玩家在游戏中的决策过程。

除了基本的规则和策略外,21点游戏还可以进行一些扩展。

可以添加多人游戏功能,让多个玩家同时参与游戏,并通过比较点数大小来确定胜负;也可以引入赌注和赔率的概念,增加游戏的趣味性和挑战性。

这些扩展功能可以通过编程来实现,并让游戏更加丰富和有趣。

通过编程算21点的思路可以帮助我们更好地理解游戏规则和策略,并实现一个简单而有趣的21点游戏。

通过编程的方式,我们可以随时随地进行游戏,提高自己的策略思维能力,同时也能享受到游戏带来的乐趣和挑战。

21点游戏代码

21点游戏代码
POP CX
RET
RAND ENDP
DISP0 PROC
CALL SPACE ;h312,输出空格
CALL SPACE ;h312,输出空格
CALL SPACE ;h312,输出空格
MOV AH,0 ;读当前时钟值
INT 1AH ;中断
MOV AX,DX
AND AH,3 ;求和
MOV DL,13
DB ' '
DB '****************************************','$'
N DB ?
A9: MOV AL,QH2 ;
CMP QH1,AL ;判断游戏者与电脑点数大小
JA A14 ;h109,判断若电脑点数大,跳转
A10: CALL RAND
MOV QH2,BL ;产生底牌
CALL XX4 ;h252输出message0
A4: MOV AH,0 ;从键盘读字符,ah/al=扫描码
INT 16H
CALL JIAN ;h226,记录积分
CMP JIFEN,10 ;若积分不大于10分,跳转,游戏结束
JB A18
JMP A16 ;若积分大于10,跳转,message4
MOV N,5
JMP A3 ;无条件跳转
JI: MOV N,10
CALL XX20 ;h344,输出字母y
A3: CALL RAND ;h124,产生一个随机数
START: PUSH DS ;将ds寄存器压入栈
MOV AX,0 ;将0传入ax寄存器
PUSH AX ;将ax压入栈

微机程序设计参考——21点扑克游戏设计

微机程序设计参考——21点扑克游戏设计

21点扑克游戏设计21点游戏中,我们想要实现的功能大致有以下几点,具体的扑克21点规则程序(随机的取牌、自动判断是否大于21点、电脑玩家的牌底隐藏)、玩家的赌注程序、游戏的可循环性、将游戏形象在dos 界面简洁的输出、游戏的难度选择设计。

程序框图:成员: 冯麟堡 2012180016 随机数的生成,dos 界面的输出,辅助功能的实现 林康尘 2012180012 取牌条件判断子程序,输赢判断子程序实现,赌注计算 由子程序的调用和宏指令调用完善整个程序。

循环次数 随机数发牌子程序产生ASCII 码 ASCII 码赋予变量并输出循环次数 随机数发牌子程序产生ASCII 码 ASCII 码赋予变量并输出 电脑取牌条件判断 由输入进行条件判断 START输赢判断子程序 赌注计算子程序 屏幕清理 寄存器清理 变量清理不取 大于2 取 大于2程序代码:DA TA SEGMENTN DW 0COMPUTERN DB 0,0,0,0,0,0,0 ;电脑点数数字PLAYERN DB 0,0,0,0,0,0,0 ;玩家点数数字COMPUTERA DB 0,0,0,0,0,0,0 ;电脑点数ASCIII码CHOOSEP DB 0 ;玩家选择变量S_PLAYER DB 'player: $' ;游戏提示字符串S_COMPUTER DB 'computer:$' ;游戏提示字符串S_GAMETIME DB 'your game times:$';游戏次数提示字符串GAMETIME DB '00$' ;游戏次数字符串GAMETIMEN DB 0 ;游戏次数S_CASH DB 'your cash:$' ;游戏现金提示字符串CASH DB '00500$' ;游戏现金字符串CASHN DW 500 ;游戏现金S_BET DB 'your bet:$' ;游戏赌注提示字符串GAMBLE DB 4,0,0,0,0,0 ;游戏赌注变量GAMBLEN DW 0 ;游戏赌注SPA DB ' ','$' ;空格字符串S_CHOOSE DB 'your choose ',40,' ',41,'$' ;游戏提示字符串WIN DB 'Congratulations! YOU WIN!$' ;游戏提示字符串LOSE DB 'YOU LOSE!$' ;游戏提示字符串DRAW DB 'DRAW!$' ;游戏提示字符串S_INPUT DB '!Please input your bet!$' ;游戏提示字符串NOCASH DB 'NO CASH!$' ;游戏提示字符串REPEAT DB 'play again',129,'(Y or N)$' ;游戏提示字符串CARD DB 'take another card or not',129,'(Y or N)$' ;游戏提示字符串SPA1 DB ' $' ;长空格字符串DA TA ENDSSTACK SEGMENT ;堆栈设置STA DB 128 DUP (0)STACK_TOP DB 0STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKPRINT MACRO ;设置光标位置,显示字符串MOV AH,02HINT 10H ;根据dx中的内容设置光标位置MOV AH,09H ;屏幕输出SI指针的字符串MOV DX,SIINT 21HENDMCASHSUM MACRO ;将现金cash数字换算为ascii码LEA SI,CASHMOV AX,CASHN ;AX中保存CASHNMOV DX,0 ;DX清零MOV BX,10000DIV BX ;計算CASHN中的萬分位ADD AL,30HMOV [SI],ALINC SIMOV AX,DXMOV DX,0MOV BX,1000DIV BX ;;計算CASHN中的千分位ADD AL,30HMOV [SI],ALINC SIMOV AX,DXMOV DX,0MOV BX,100DIV BX ;計算CASHN中的百分位ADD AL,30HMOV [SI],ALINC SIMOV AX,DXMOV DX,0MOV BX,10DIV BX ;計算CASHN中的十分位ADD AL,30HMOV [SI],ALADD DL,30HMOV [SI+1],DL ;余数即为CASHN的个位ENDMBETPRINT MACRO ;赌注的显示程序宏MOV AH,02HMOV DX,020CHINT 10HLEA SI,GAMBLEMOV AH,02HMOV DL,[SI+2]INT 21HMOV DL,[SI+3]INT 21HMOV DL,[SI+4]INT 21HENDMSTART:MOV AX,DATA ;数据段初始化MOV DS,AX ;设置数据段MOV AX,STACKMOV SS,AX ;设置堆栈段LEA SP,STACK_TOP ;设置堆栈顶端指针LEA SI,S_GAMETIMEMOV DX,0 ;DH为显示器行位置;DL为显示器列位置PRINT ;显示游戏次数文字LEA SI,GAMETIMEMOV DX,0010HPRINT ;显示游戏次LEA SI,S_BETMOV DX,0203HPRINT ;显示赌注文字LEA SI,S_CASHMOV DX,0017HPRINT ;显示现金文字LEA SI,CASHMOV DX,0021HPRINT ;显示现金LEA SI,S_COMPUTER ;显示computer字符MOV DX,0503HPRINTLEA SI,S_PLAYER ;显示player字符MOV DX,0903HPRINTLEA SI,S_CHOOSEMOV DX,0E03HPRINT ;显示CHOOSE字符串NEW:MOV AH,0 ;初始化玩家选择开关MOV CHOOSEP,AHLEA SI,SPA1 ;利用显示空格字符串进行屏幕清理MOV DX,050EHPRINT ;利用显示空格字符串进行屏幕清理MOV DX,060EHPRINT ;利用显示空格字符串进行屏幕清理MOV DX,090EHPRINT ;利用显示空格字符串进行屏幕清理MOV DX,1005HPRINT ;利用显示空格字符串进行屏幕清理MOV DX,1105HPRINTLEA SI,SPA ;利用显示空格字符串进行屏幕清理MOV DX,020CHPRINTLEA SI,COMPUTERN ;电脑扑克点数清零MOV CX,7COMN0:MOV [SI],0INC SILOOP COMN0LEA SI,PLAYERN ;玩家扑克点数清零MOV CX,7PLAYN0:MOV [SI],0INC SILOOP PLAYN0LEA SI,COMPUTERA ;电脑ASCII码清零MOV CX,7COMA0:MOV [SI],0INC SILOOP COMA0MOV AL,GAMETIMEN ;游戏次数重新计算ADD AL,1MOV GAMETIMEN,ALMOV AH,0SUB AL,0AAA ;游戏次数由十六进制变为十进制ADD AH,30HADD AL,30HLEA SI,GAMETIME ;更改游戏次数字符串MOV [SI],AHMOV [SI+1],ALLEA SI,GAMETIME ;游戏次数屏幕显示MOV DX,0010HPRINTLEA SI,S_INPUT ;显示提示输入赌注字符串MOV DX,1106HPRINTAG1:LEA SI,SPA ;输出空格字符串进行屏幕清理MOV DX,0E10HPRINTLEA SI,GAMBLE ;赌注ASCII清零MOV CX,5RG: MOV [SI+1],0INC SILOOP RGMOV AX,0 ;赌注数清零MOV GAMBLEN,AXMOV DX,0E10H ;设置光标位置到your bet:MOV AH,02HINT 10HMOV AH,0AHLEA SI,GAMBLE ;赌注字符串输入存入GAMBLEMOV DX,SIINT 21HMOV BX,1 ;判断输入个数,非法字符不纳入计算BETNUM:CMP [SI+BX+1],30HJS BETSUMCMP [SI+BX+1],40HJNS BETSUMINC BXJMP BETNUMBETSUM:CMP BX,1 ;对赌注字符串变换为数字JZ CMPCGMOV AL,[SI+BX]SUB AL,30HMOV AH,0ADD GAMBLEN,AX ;个位加入GAMBLENDEC BXCMP BX,1JZ CMPCGMOV DX,10MOV AL,[SI+BX]SUB AL,30HMUL DLADD GAMBLEN,AX ;十位加入GAMBLENDEC BXCMP BX,1JZ CMPCGMOV DX,100MOV AL,[SI+BX]SUB AL,30HMUL DLADD GAMBLEN,AX ;百位加入GAMBLEN CMPCG:MOV AX,CASHNMOV DX,GAMBLENCMP AX,DX ;比较输入的赌注和现金大小JNS F1LEA SI,NOCASH ;显示现金不够的字符串MOV DX,1006HPRINTJMP AG1 ;跳转至赌注输入处F1: SUB AX,DX ;现金减去赌注MOV CASHN,AX ;赋予CASHN现金值CASHSUM ;;将现金cash数字换算为ascii码LEA SI,CASH ;屏幕输出CASHMOV DX,0021HPRINTBETPRINT ;赌注屏幕显示BEGIN:LEA SI,SPA1 ;利用空格字符串进行屏幕清理MOV DX,1105HPRINTMOV DX,1005HPRINTLEA SI,SPAMOV DX,0E10HPRINTLEA SI,COMPUTERALEA DI,COMPUTERNMOV DH,05H ;设置DH为05HCMP CX,2 ;电脑取牌条件判断JS TACALL SUM ;调用点数大小计算子程序CMP AH,17JS TA ;大点数小于17取牌CMP AH,22JS NTA ;大点数小于22不取牌CMP AL,17JS TA ;小点数小于17取牌JMP NTATA: CALL 21P ;调用随机产生21点数子程序ADD DI,CX ;DL为点数大小MOV [DI],DL ;存至COMPUTERNINC DIADD SI,CX ;BL为ascii码MOV [SI],BL ;存至COMPUTERAINC SIMOV AX,1CMP CX,0JZ CNP ;当cx等于0,AX=0使子程序输出*MOV AX,0CNP:CALL 21PRINT ;调用点数屏幕显示子程序JMP GOAHEAD ;跳过取牌判断NTA:MOV AH,CHOOSEP ;若电脑不取牌,判断玩家选择CMP AH,1JZ ADDSTAGE ;玩家也不取牌,进行结果统计GOAHEAD:MOV AH,CHOOSEP ;判断玩家选择CMP AH,0JZ PTAKEC ;若玩家CHOOSEP为0,直接执行电脑取牌判断INC CXJMP BEGINPTAKEC:LEA DI,PLAYERN ;指针指向PLAYERNMOV DH,09HCALL 21P ;调用随机数取21点ADD DI,CX ;DL为点数大小MOV [DI],DL ;存入PLAYERN中INC DIMOV AX,1 ;当AX为1时,21PRINT不输出*CALL 21PRINT ;调用21点数屏幕显示子程序CMP CX,6 ;取牌次数判断JZ ADDSTAGE ;双方最多取7次扑克,跳至结果统计INC CXCMP CX,2 ;至少循环两次,再询问玩家的取牌JS BEGINLEA SI,CARD ;屏幕输出取牌的提示MOV DX,1105HPRINTMOV DX,0E10H ;光标位置确认MOV AH,02HINT 10HMOV AH,01H ;单字符输入INT 21HCMP AL,'N' ;玩家输入'N'则跳转JZ DONOTTAKECMP AL,'n' ;玩家输入'n'则跳转JZ DONOTTAKEJMP BEGINDONOTTAKE: ;玩家不取牌,CHOOSEP赋予1 MOV AH,1MOV CHOOSEP,AHJMP BEGINADDSTAGE:MOV DH,06H ;DH为显示的行数LEA SI,COMPUTERA;结果统计时在下一行输出电脑隐藏扑克MOV N,CX ;重置CX次数MOV CX,0SHOWCARD:MOV AX,1 ;重复重置AXMOV BL,[SI]INC SICALL 21PRINT ;调用21点屏幕输出子程序INC CXCMP CX,NJZ SUMMA TIONJMP SHOWCARDSUMMA TION:LEA DI,PLAYERNCALL SUM ;玩家扑克点数和计算子程序CMP AL,22 ;玩家AL点数大于21点即输掉比赛JNS LOSEPCMP AH,22 ;AH点数小于22点,则使用AH点数JNS EQ1MOV DL,AH ;玩家点数赋予DLJMP PO1EQ1:MOV DL,AL ;玩家点数赋予DLPO1:LEA DI,COMPUTERNCALL SUM ;电脑扑克点数和计算子程序CMP AL,22 ;电脑AL点数大于21点即输掉比赛JNS WINPCMP AH,22 ;AH点数小于22点,则使用AH点数JNS EQ2MOV DH,AH ;电脑点数赋予DHJMP PO2EQ2:MOV DH,AL ;电脑点数赋予DHPO2:CMP DH,DL ;DH与DL比较;电脑点数和与玩家点数和比较JS WINP ;胜负跳转JZ DRAWPJMP LOSEPWINP: ;玩家胜利的情况LEA SI,WIN ;提示胜利的字符串屏幕显示MOV DX,100AHPRINTMOV AX,GAMBLEN ;玩家获得双倍的赌注ADD CASHN,AX ;CASHN加上GAMBLENADD CASHN,AX ;CASHN加上GAMBLENJMP GAMEOVERDRAWP: ;玩家平局LEA SI,DRAW ;提示平局的字符串屏幕显示MOV DX,100AHPRINTMOV AX,GAMBLEN ;赌注还给玩家ADD CASHN,AX ;CASHN加上GAMBLENJMP GAMEOVERLOSEP: ;电脑胜利LEA SI,LOSE ;提示失败的字符串进行屏幕显示MOV DX,100AHPRINTJMP GAMEOVERGAMEOVER:MOV AX,CASHNCASHSUM ;CASH十六进制转换为ASCII码LEA SI,CASH ;对CASH进行屏幕显示MOV DX,0021HPRINTLEA SI,REPEAT ;提示重新游戏进行屏幕显示MOV DX,1106HPRINTLEA SI,SPA ;输出空格进行屏幕清理MOV DX,0E10HPRINTMOV DX,0E10H ;设置光标位置到CHOOSE位置MOV AH,02HINT 10HMOV AH,01H ;单字符输入调用INT 21HCMP AL,'Y' ;输入为'Y'时,重新21点游戏JZ NEWCMP AL,'y' ;输入为'y'时,重新21点游戏JZ NEWMOV AX,4C00HINT 21HSUM PROC ;计算点数总和;输出AL,AH为点数和PUSH CXPUSH DXPUSH DIPUSH BXMOV CX,7MOV AX,0MOV BX,0SUMREPEAT:MOV BH,[DI] ;DI指针指向需要计算点数和的变量ADD AL,BHADD AH,BHCMP BH,01H ;BH为01H时进行A扑克特殊规则计算JNZ SUMOVERCMP BL,1 ;A扑克规则只进行一次JZ SUMOVERMOV BL,1ADD AH,10 ;若牌堆中含A,AH为A为11点时点数和,AL为A作1点时点数和SUMOVER:INC DILOOP SUMREPEATPOP BXPOP DIPOP DXPOP CXRETENDP21PRINT PROC ;ASCII码在屏幕输出,需给出DH行位置,BL输出ASCII PUSH CX ;子程序外调用,ax=0输出'*'PUSH AXMOV DL,0BH ;ASCII码显示初始列位置ADD CX,1MOV AX,4MUL CLADD DL,AL ;根据cx确定正确输出位置MOV AH,02H ;光标位置调用INT 10HPOP AXCMP AX,0 ;判断ax,若为0输出*JNZ PRIMOV AH,02HMOV DL,2AH ;'*'的ASCII码为2AHINT 21HJMP PRINTOVERPRI:MOV AH,02HCMP BL,31H ;判断是否为10的ASCIIJNZ NORMALPRMOV DL,31H ;输出1INT 21HMOV DL,30H ;输出0INT 21HJMP PRINTOVERNORMALPR:MOV DL,BL ;输出其余ASCIIINT 21HPRINTOVER:POP CXRETENDP21P PROC ;随机取数计算成扑克点数PUSH CX ;输出dl为点数大小CALL RAND ;输出bl为ascii大小CMP BL,8JS L1JNZ L2MOV DL,1MOV BL,41H ;AJMP OVERL2: MOV DL,10CMP BL,0BHJNS L3ADD BL,41H ;J/KJMP OVERL3: JNZ L4MOV BL,51H ;QJMP OVERL4: MOV BL,31H ;10JMP OVERL1: MOV DL,BLADD DL,2ADD BL,32H ;2~9OVER:POP CXRET21P ENDPRAND PROC ;随机数产生器PUSH CXPUSH DXPUSH AXSTIMOV AH,0 ;读取时钟计数器数值INT 1AHMOV AX,DXAND AH,0 ;清高位MOV DL,13 ;除以13,产生0~12余数DIV DLMOV BL,AH ;余数存bl,作随机数CLIPOP AXPOP DXPOP CXRETRAND ENDPCODE ENDS程序中的关键功能调用:MOV AH,02HINT 10H功能为设置当前显示光标位置,输入参数有BH=页数,DH=行数,DL=列数MOV AH,00HINT 1AH功能为读取时钟“滴答”计数,出口参数有AL表示是否经过午夜;CX:DX=时钟“滴答”计数通过调用后,读取的计数单位是微秒量级的,即使同样程序多次运行过程,其中输出的DX 都不同,能够很好的实现小范围的随机数设计。

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

【实验名称】用汇编语言实现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。

相关文档
最新文档