微机原理程序INT 21是什么意思

微机原理程序INT 21是什么意思,第1张

在DOS环境下,通常调用DOS的4CH号中断功能,是汇编语言返回DOS,即采用如下两条指令:

MOV AH,4CH

INT 21H

如果不是主模块,这两条指令是不需要的。

#include<stdio.h>

main()

{

int y=1,k

scanf("%d",&k)

if(k!=1)

{ while(k>1)

{k--y=2*(k+y)}

printf("The monkey got %d peachs in first day.\n",y)

}

else printf("The monkey got 1 peach in first day.\n")

}

原题1

/**********************问题需求:实现一个电脑做庄,你当玩家的21点游戏*******************************************数据结构:player_card[n],host_card[m]********************************* 0<n<=5,0<m<=5程序结构:主函数:输入选择,输出结果 判断函数:判断是否要牌,若不要牌,则返回0;否则返回1; 比较函数:若没有爆牌,而且player不想要牌或n=5,则比较player与host的大小, 若player大,则返回0;否则返回1;*************************version 2.0 copyright@2009***************************************************************designed By Allen*************************************************************************all rights deserved******************************************** 程序难点:1,如何在A-K中随机选取一张牌当时解决方案:用rand()函数 2,如何实现电脑(即庄家)自动判断是否要牌当时解决方案:规定一个要牌范围(18-21为不要牌,1-18为要牌)今天(19号)的解决方案:用随机数0~1,1为要牌,0为不要牌实现 3,调用rand()函数时,不知道该如何为srand()播种当时解决方案,用时间播种。srand((int)time(null)) 4,种的种子不是我想要的当时的解决方案:用1+int (10.0*rand()/(RAND_MAX+1.0))表达式 5,随机数不是真正的随机,每次随机数都一样 当时解决方案:用time(0)产生真正的随机数 程序还未实现的功能: 1,A可以当11,也可以当1的功能 已经实现 2,图形化界面 由于考试等原因,不准备实现,暑假再实现 3,菜单 实现 4,显示出每张牌的值,用A~K表示正在实现中,未调试成功21号已经实现 5,程序全部完成后把庄家的前几次的牌点全部不显示 已经实现 6,实现电脑自动判断是否要牌 已经实现 程序错误已改正的地方: 1,a做为11时,值并未加上去 程序错误未改正的地方: 暂时没有******************************************************************************************/#include <stdio.h>#include <string.h>#include <stdlib.h>#include <time.h>#define NULL 0int compare(char player_sum,char host_sum)//比较玩家与庄家的牌面大小{ if(player_sum >host_sum) return 1 else return 0}/*int sentC_sumC(char temp[],int k)//发牌,并求和{ int i,sum=0,j temp[k]=1+int (10.0*rand()/(RAND_MAX+1.0)) for(i=0i<ki++) { for(j=i+1j<kj++) if(temp[i]==11 &&temp[j]==1)temp[j]=11 sum+=temp[k] }//以上用于实现玩家一手牌里A只能做1或11 return sum}*//*此函数用于检验是否爆牌,yes,return 1no,return 0*/int over(int sum){ if(sum>21) return 1 else return 0}/*int change(int n)//a is 11 or 1?{ int m=0 if(n==1) m=1 else if(n==2) m=11 return m}*//*int acer(char player_card[],int n,int player_sum,int host_sum){ int k if(player_card[n]==1) { printf("你初始的牌面值%d 庄家的初始的牌面值%d\n",player_sum,host_sum) printf("你有一张ACE!\n") printf("***********************************") printf("\n想要A做1还是做11?\n1,1\n2,11\n") scanf("%d",&k) printf("***********************************\n") //player_card[n]=change(k) if(k==1)player_card[n]=1 elseplayer_card[n]=11 }//以上if语句实现选择这手牌里A做1还是11的问题 return player_card[n]}*//*char translate_2_ch(int temp){ int n=0,m=0 char ch switch(temp) { case '1': ch='A' break case '10': { n=1+int(rand()/(RAND_MAX+1.0)) if(n==1) { m=1+int(rand()/(RAND_MAX+1.0)) if(m==1)ch='J' elsech='Q' } else ch='K' } break } return ch}*/ /*将数字转换成A~K*//*int translate_2_int(){ return 0}*/void game_start(){ int i,k,j,l,choice,player_sum=0,host_sum=0 int flag=0//此变量用来标记是否爆牌,然后跳出多余循环 int n=0,m=0,x=0,count=2,aceflag=0 srand(time(0)) char player_card[10],host_card[10],ch printf(" GAME START! \n") for(i=0i<2i++) { player_card[i]=1+int (10.0*rand()/(RAND_MAX+1.0)) switch(player_card[i]) { case 1: ch='A' break case 10: { n=1+int(rand()/(RAND_MAX+1.0)) if(n==1) { m=1+int(rand()/(RAND_MAX+1.0)) if(m==1) {x=1+int(rand()/(RAND_MAX+1.0))if(x==1) ch=10else ch='J' } elsech='Q' } else ch='K' } break }//switch语句用于将数字转换成字符 if(player_card[i]>1 &&player_card[i]<10) printf("你的第%d张牌%d\t",i+1,player_card[i]) else { if(ch==10)printf("你的第%d张牌%d\t",i+1,ch) elseprintf("你的第%d张牌%c\t",i+1,ch) } host_card[i]=1+int (10.0*rand()/(RAND_MAX+1.0)) switch(host_card[i]) { case 1: ch='A' break case 10: { n=1+int(rand()/(RAND_MAX+1.0)) if(n==1) { m=1+int(rand()/(RAND_MAX+1.0)) if(m==1) {x=1+int(rand()/(RAND_MAX+1.0))if(x==1) ch=10else ch='J' } elsech='Q' } else ch='K' } break }//switch语句用于将数字转换成字符 //屏蔽庄家的牌点,除总牌点外 /*if(host_card[i]>1 &&host_card[i]<10) printf("庄家的第%d张牌%d\n",i+1,host_card[i]) else { if(ch==10)printf("庄家的第%d张牌%d\n",i+1,ch) elseprintf("庄家的第%d张牌%c\n",i+1,ch) }*/ if(host_card[i]==1) { k=int(rand()/(RAND_MAX+1.0))+1 if(k==1)host_card[i]=1 elsehost_card[i]=11 }//以上用于实现电脑自动判断庄家是让A做11还是1 }//endfor for(i=0i<2i++)1 for(j=0j<2j++) player_sum+=player_card[j]//先对2张牌进行累加 for(i=0i<2i++) { for(j=1j<2j++) { if(host_card[i]==11 &&host_card[j]==1)host_card[i]=11 } host_sum +=host_card[i]//对庄家的两张牌进行累加 if(player_card[i]==1) { if(aceflag==1)break //player_card[i]=acer(player_card,i,player_sum,host_sum) else {printf("\n你初始的牌面值%d\n",player_sum,host_sum)printf("你有一张ACE!\n")printf("***********************************")printf("\n想要A做1还是做11?\n1,1\n2,11\n")scanf("%d",&k)printf("***********************************\n")//player_card[n]=change(k)if(k==1) player_card[i]=1else{ player_card[i]=11 player_sum+=10}aceflag=1 } }//以上if语句实现选择这手牌里A做1还是11的问题 for(j=1j<2j++) { if(player_card[i]==11 &&player_card[j]==1) {player_card[j]=11player_sum+=10 } } }//endfor for(i=0i<2i++)4 printf("你的牌面值%d\n",player_sum) if(over(host_sum)==1 ) { if(over(player_sum)==1)printf("你爆牌了,庄家也爆牌了\nYOU LOSE!\n") elseprintf("庄家爆牌了\nYOU WIN!\n") flag=1 } else if (over(player_sum)==1) { printf("你爆牌了\nYOU LOSE!\n") flag=1 } //以上为是否爆牌 for(i=0, k=2i<2i++,k++) { if(host_sum<18 &&host_sum>0) { host_card[k]=1+int (10.0*rand()/(RAND_MAX+1.0))//电脑自动判断庄家是否要牌 for(j=1j<5j++)if(host_card[i]==11 &&host_card[j]==1) host_card[j]=11//以上实现一手牌里A只能做1或11 host_sum+=host_card[k] } else break }//endfor for(i=0i<2i++) 2 for(i=0,k=2i<5i++,k++) { printf("DO YOU WANT ONE MORE CARD? \n") printf("***********************************\n") printf("1,YES\n2,NO\n") scanf("%d",&choice) printf("***********************************\n") if(choice==2) break else { //sum=sentC_sumC(player_card,k) //为什么调用后sum值为原来调用值的2倍? //player_sum+=sum player_card[k]=1+int(10.0*rand()/(RAND_MAX+1.0)) if(aceflag==0 &&player_card[k]==1) {printf("你有一张ACE!\n")printf("***********************************")printf("\n想要A做1还是做11?\n1,1\n2,11\n")scanf("%d",&l)printf("***********************************\n") //player_card[n]=change(k)if(l==1) player_card[k]=1else{ player_card[k]=11 player_sum+=10}aceflag=1 }//以上if语句实现选择这手牌里A做1还是11的问题 for(l=0l<kl++) {if(player_card[k]==11 &&player_card[l]==1){ player_card[l]=11 player_sum+=10} } switch(player_card[k]) { case 1: ch='A'break case 10: { n=1+int(rand()/(RAND_MAX+1.0)) if(n==1) { m=1+int(rand()/(RAND_MAX+1.0)) if(m==1) {x=1+int(rand()/(RAND_MAX+1.0))if(x==1) ch=10else ch='J' } elsech='Q' } else ch='K' } break } //switch语句用于将数字转换成字符 if(player_card[k]>1 &&player_card[k]<10)printf("你的第%d张牌%d\n",i+3,player_card[k]) else {if(ch==10) printf("你的第%d张牌%d\n",i+3,ch)else printf("你的第%d张牌%c\n",i+3,ch) } for(l=0l<kl++) {for(j=l+1j<kj++) if(player_card[l]==11 &&player_card[j]==1) player_card[j]=11 } player_sum+=player_card[k] count++ if(over(host_sum)==1 ) {if(over(player_sum)==1) printf("你爆牌了,庄家也爆牌了\n你的牌面值%d\t庄家的牌面值%d\nYOU LOSE!\n",player_sum,host_sum)else printf("庄家爆牌了\n庄家的牌面值%d\nYOU WIN!\n",host_sum)flag=1 } else if (over(player_sum)==1) {printf("你爆牌了\n你的牌面值是%d\nYOU LOSE!\n",player_sum)flag=1 } if(flag==1)//用于跳出循环,防止做无用的循环break if(count==5) {printf("已经发了5张牌了,该决一胜负了!\n")break } }//end for else if(over(host_sum)==1 ) { if(over(player_sum)==1)printf("你爆牌了,庄家也爆牌了\n你的牌面值%d\t庄家的牌面值%dYOU LOSE!\n",player_sum,host_sum) elseprintf("庄家爆牌了\n庄家的牌面值%d\nYOU WIN!\n",host_sum) flag=1 } else if (over(player_sum)==1) { printf("你爆牌了\n你的牌面值是%d\nYOU LOSE!\n",player_sum) flag=1 } } //以上为是否爆牌 if(flag==0) { if(compare(player_sum,host_sum)==1) { printf("你的牌面值%d 庄家的牌面值%d\n",player_sum,host_sum) printf("YOU WIN!\n") } else { //printf("已经发了5张牌了,该决一胜负了!\n") printf("你的牌面值%d 庄家的牌面值%d\n",player_sum,host_sum) printf("YOU LOSE!\n") } }}void menu(){ printf("***********************************************************\n") printf("**********************21 POINT GAME************************\n") printf("***********************************************************\n") printf("**MAKE A SELECTION **\n") printf("**1,PLAY **\n") printf("**2,EXIT **\n") printf("***********************************************************\n") printf("***********************************************************\n") printf("***********************************************************\n")}int main(){ int n menu() scanf("%d",&n) if(n==1) game_start() else { printf("GAME OVER! BYE-BYE!\n") exit(0) } return 0}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7724881.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存