BlackJack游戏-C语言
C语言程序设计21点扑克牌游戏

实用标准文案实验报告课程名称:C语言程序设计实验项目:21点扑克牌游戏设计专业班级:电子信息工程实验室号:信息205 实验组号:xx 实验时间:2010-5-4 批阅时间:指导教师:成绩:沈阳工业大学实验报告(适用计算机程序设计类)专业班级:电子信息工程0902 学号:姓名:实验名称:21点扑克牌游戏附件A 沈阳工业大学实验报告(适用计算机程序设计类)专业班级:电子信息工程0902 学号:姓名:实验步骤或程序:(我所做的程序是作弊程序改动已经加粗)#include<time.h>#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 *);/*询问是否重开一局*/void Hit_f(int *);/*发一张牌*/void Deal_f(int *,int *,int *,int *);/*双方各发两张牌*/void Bet_f(int *,int *);/*接受下注的数目*/void Print_f(int ,int ,int ,int );/*打印结果*/void Rules_f();/*显示游戏规则*/void Results_f(int ,int ,int ,int *,int *,int *,int *);/*统计结果(输赢平)*/void Hit_f2(int * npTotal,int a);int nnn;int main(){int nPlayer=0,nCpu=0,nWin=0,nLose=0,nDraw=0,nPlayerTurns=0, nCpuTurns=0,nMoney=0,nBet;/* nPlayer——玩家手中全部牌的点数和,nPlayerTurns——玩家手中牌的数量*/char chAnswer;char mmm;int a;system("cls");/*执行系统命令“清屏”*/Rules_f();printf("\t\t\tWOULD YOU LIKE TO PLAY? ");scanf("%c",&chAnswer);if((chAnswer=='y')||(chAnswer=='Y')){printf("\t\t\tI WILL LET YOU START WITH $100\n");nMoney=100;printf("\t\t\t");Pause_f();}else{return(0);}do{system("cls");if(nMoney<0){printf("Your broke\n");return(0);}Bet_f(&nBet,&nMoney);/*接受下注的数目*/Deal_f(&nPlayer,&nCpu,&nPlayerTurns,&nCpuTurns);/*双方各发两张牌*/ printf("\t\t\tWould you want to cheat? yes or no?");scanf("%c",&mmm);if((mmm=='y')||(mmm=='Y')){printf("%d",nnn);printf("\t\t\twhich card do you want?");scanf("%d",&a);}system("cls");do{printf("\t\t\tWould You Like To Hit or Stay :");/*询问玩家是否接着要牌*/scanf(" %c",&chAnswer);if((chAnswer=='h')||(chAnswer=='H')){nPlayerTurns++;/*计算总牌数*/if(nPlayerTurns>5)/*看是否允许再要牌*/{printf("\t\t\tYou Can't Have more than 5 cards");}}if((nPlayerTurns<6)&&(chAnswer=='h')){printf("\n");if((mmm=='y')||(mmm=='Y'))Hit_f2(&nPlayer,a);else Hit_f(&nPlayer);/*为玩家发一张牌*/}}while((chAnswer=='h')||(chAnswer=='H'));for(;(nCpu<16)&&(nCpuTurns<6);nCpuTurns++)/*计算机要牌的条件*/{printf("\n");printf("\t\t\tThe Dealer Takes A Card");Hit_f(&nCpu);/*为计算机发一张牌*/}printf("\n\n");printf("\t\t\tThe Dealer Has A Total: %d\n", nCpu);/*显示总点数*/printf("\t\t\tYou Have A Total Of: %d\n", nPlayer);printf("\n");Results_f(nPlayer,nCpu,nBet,&nMoney,&nDraw,&nWin,&nLose);/*计算最后的结果(统计输赢平的局数)*/Replay_f(&chAnswer);/*询问是否重开一局*/}while((chAnswer=='y')||(chAnswer=='Y'));Print_f(nWin,nLose,nDraw,nMoney);/*打印最后结果*/printf("\n");printf("\t\t\t\t");return(0);}void Rules_f() /*这个函数显示游戏规则*/{printf("\t\t WELCOME TO ISAAC SHAFFERS BLACK JACK GAME\n");printf("\t\t\t HERE ARE SOME SIMPLE RULES\n");printf("\t\t\t1:You Can only have a max of 5 cards.\n");printf("\t\t\t2:If you bust you automatically lose.\n");printf("\t\t\t3:If you win you win double what you bet");printf("\t\t\t4:The Dealer stops at or after 16.\n");printf("\t\t\t\t");getchar();}void Bet_f(int* npBet,int* npMoney) /*该函数接受玩家下注,并计算赌资的总数*/{system("cls");printf("\t\t\tYOU HA VE:$%d\n",*npMoney);printf("\t\t\tHow Much Do You Wish To Bet:");scanf("%d",npBet);if(*npBet<0){*npBet=*npBet*(-1);}*npMoney=*npMoney-*npBet;}void Deal_f(int* npPlayer,int*npCpu,int*npPlayeReturns,int *npCpuReturns)/*该函数是给计算机与玩家各发两张牌*/{int nPlayerCard1,nPlayerCard2,nCpuCard1,nCpuCard2;*npPlayeReturns=2;*npCpuReturns=2;nPlayerCard1=Random_f(13,1);printf("\n\t\t\tDEALING HAND\n");getchar();Pause_f();nPlayerCard2=Random_f(13,1);Pause_f();nCpuCard1=Random_f(13,1);Pause_f();nCpuCard2=Random_f(13,1);if (nPlayerCard1>=10){nPlayerCard1=10;}if (nPlayerCard2>=10){nPlayerCard2=10;}if (nCpuCard1>=10){nCpuCard1=10;}if (nCpuCard2>=10){nCpuCard2=10;}*npPlayer=nPlayerCard1+nPlayerCard2;*npCpu=nCpuCard1+nCpuCard2;printf("\t\t\tYOU HA VE a total of:%d\n",*npPlayer);printf("[%d]", nPlayerCard1);printf("[%d]",nPlayerCard2);printf("\n");printf("\t\t\tThe DEALER HAS A %d SHOWING",nCpuCard1);printf("\n");printf("[*][%d]",nCpuCard1);nnn=nCpuCard2;}void Hit_f(int * npTotal) /* 发一张牌,返回点数之和*/{int nCard;nCard=Random_f(13,1);if(nCard>=10){nCard=10;}* npTotal=* npTotal+nCard;printf("\t\t\tThe card is a :%d\n", nCard);printf("\t\t\tTotal is :%d\n", * npTotal);}void Results_f(int nPlayer,int nCpu,int nBet,int * npMoney,int * npDraw,int* npWin,int * npLose)/*统计结果(输赢平及输赢平的局数)*/ {if(nCpu==nPlayer){printf("\t\t\tIT WAS A DRAW HOUSE WINS\n");++* npDraw;}if(nPlayer>21){printf("\t\t\tYou Bust\n");++* npLose;}else{if(nCpu<nPlayer){printf("\n\t\t\tYOU WIN");*npMoney=*npMoney+(nBet*2);++* npWin;}}if(nCpu>21){printf("\t\t\tDealer Bust\n");if(nPlayer<=21){printf("\n\t\t\tYOU WIN");++* npWin;*npMoney=*npMoney+(nBet*2);}}else{if(nCpu>nPlayer){printf("\t\t\tYOU LOSE\n");++* npLose;}}}void Replay_f(char *chpAns) /*询问是否重开一局*/ {printf("\n\t\tWould You Like To Play This Game Again:");scanf("%c",chpAns);}void Print_f(int nWins,int nLose,int nDraw,int nMoney){printf("\t\t\t\tWINS:%d\n", nWins);printf("\t\t\t\tLOSE:%d\n", nLose);printf("\t\t\t\tDRAWS:%d\n",nDraw);printf("\t\t\t\tMONEY:%d\n",nMoney);}void Wait_f(int nMilli){int nStart1,nStart2;for(nStart1=0;nStart1<nMilli*100;nStart1++)for(nStart2=0;nStart2<nMilli*100;nStart2++){;}}void Pause_f(){printf("Press Any Key To Continue");getchar();}int Random_f(long lBigNumber, long lSmallNumber) /*选择两个参数之间的随机数*/{int nRan;srand((unsigned)time(NULL));nRan=rand()%(lBigNumber-(lSmallNumber-1))+lSmallNumber;return(nRan);}void Hit_f2(int * npTotal,int a) /* 发一张牌,返回点数之和*/{int nCard;nCard=a;if(nCard>=10){nCard=10;}* npTotal=* npTotal+nCard;printf("\t\t\tThe card is a :%d\n", nCard);printf("\t\t\tTotal is :%d\n", * npTotal);}。
C语言 黑白棋课程设计

青岛理工大学《C语言程序设计》题目指导教师:姓名:学号:班级:专业:计算机科学与技术地点:学校机房时间:2012/6/25至2012/6/27在开始之前先下载C语言另加程序下面是下载地址:完整的源代码在文档最后/file/0cb739cbc2e59f0e7a9f11ddb5531bb8?xcode=6fc925477da8788a55 89ab5cf3551107&fid=706832624-250528-3524259283&time=1372324156&sign=FDTAXER-D Cb740ccc5511e5e8fedcff06b081203-x%2BLowAWkVifyCdSpCEA Vjd1U450%3D&to=wb&fm= Q,B,M&expires=8h&rt=pr&r=178293519&logid=3072430087一、内容黑白棋游戏设计本系统主要是在8*8规格的棋盘上实现两人黑白棋对战,功能包括:统计对弈双方各自棋子个数,当一方所下子位置不满足“自己的棋子在上下左右及斜线方向上中间包夹对方至少一个或多个棋子”条件时不能下子,满足要求的地方下子。
(2)当一方棋子棋子为0或下满棋格时结束,系统自动统计双方棋子数子多着胜。
并在游戏结束时出现提示框,显示队以结果,胜负情况,,两个按钮,“是”重新开始游戏,“否”结束游戏。
(3)游戏是用鼠标控制下棋,在下子位置点击鼠标左键安放旗子二、上机环境操作系统:WindowsXp开发工具:Microsoft visual c++6.0三、函数调用关系图wui四、各函数功能说明1.main() 主函数2.void load(void) 加载图片3.void play(void) 游戏过程控制,调用其他子函数4.void print(void) 画棋盘,以及后来画安放的棋子5.void jianjie() 在棋盘右侧显示一些游戏。
C语言课程设计黑白棋

第一章绪论1.1 C语言概述C语言是国际上广泛流行且很有发展前途的计算机高级语言,不仅用来编写应用软件,也用来编写系统软件。
C语言功能丰富,使用灵活,可移植性好,深受广大用户欢迎。
C语言的数据类型丰富,既具有高级程序设计语言的优点,又具有低级程序设计语言的特点;既可以用来编写系统程序,又可以用来编写应用程序。
(例如,著名的UNIX操作系统就是用C语言编写的)因此,C语言正在被迅速地推广和普及。
1 .2 C语言出现的历史背景在C语言诞生以前,操作系统及其他系统软件主要是用汇编语言实现的。
由于汇编语言程序设计依赖于计算机硬件,其可读性和可移植性都很差,而一般的高级语言又难以实现对计算机硬件的直接操作,因此人们需要一种兼有汇编语言和高级语言特性的语言。
C语言就是在这种环境下产生的。
它最早是由Dennis Richie于1973年设计并实现。
它的产生同UNIX系统之间具有非常密切的联系——C语言是在UNIX系统上开发的。
而无论UNIX 系统本身还是其上运行的大部分程序,都是用C语言编写实现。
同时,它同样适合于编写不同领域中的大多数程序。
C语言已经成为全球程序员的公共语言,并且由此产生了当前两个主流的语言C++和Java——它们都建立在C语言的语法和基本结构的基础上,而且现在世界上的许多软件都是在C语言及其衍生的各种语言的基础上开发而成。
目前,在微机上广泛使用的C语言编译系统有Turbo C、Borland C++、Microsoft Visual C++等。
虽然它们的基本部分都是相同的,但还是有一些差异,本程序的设计采用Turbo C作为上机编程调试环境。
C语言特点和用途①语言简洁、紧凑,使用方便、灵活。
共有32个关键字,9种控制语句。
②运算符丰富,公有34种运算符。
③数据结构丰富,数据类型有:整型、实型、字符型、数组、指针、结构体、共用体等。
④具有结构化的控制语句(如if…else、while、do…while、switch、for)⑤语法限制不太严格,程序设计自由度大。
c语言程序黑白棋设计流程

引言黑白棋的简要历史:黑白棋,又叫反棋(Reversi)、奥赛罗棋(Othello),苹果棋,翻转棋。
黑白棋起源中世纪的英国,18世纪传入日本,并在日本得到了发展。
现在,黑白棋在西方和日本很流行。
游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。
它的游戏规则简单,因此上手很容易,但是它的变化又非常复杂。
有一种说法是:只需要几分钟学会它,却需要一生的时间去精通它。
“黑白棋规则”:1)两人对奕,以轮流方式持黑子与白子。
2)开辟新局者持白子,加入者持黑子,之后以轮流方式将棋子置于棋盘格子中。
若无地方可下子,则跳过一回,由对方下子。
3)在提示的格子中,选择一个格子下子,当下子的位置与离最近的同色旗子中,若有其他棋子则中间的棋子变为与我方一样颜色。
4)当下满64个棋子,棋子多者为胜。
关于C语言:C语言是一种结构化设计语言,它兼顾有高级语言的特点和低级语言的功能。
其设计功能十分强大,既可用于编写应用软件,又可用于设计制作系统软件。
同时,C语言是一种较为通用的编程软件,在目前的软件行业中使用也是十分的广泛。
虽然C语言是面向DOS编程的,但它是计算机的底层编程工具之一。
由C语言编写的程序,它的代码质量和运行速度仅次于汇编语言编写的程序,C语言具有简单易学和可移植性好等特点,同时又具有汇编语言的特点,具有较强的生命力和广泛的应用前景。
第一章系统分析1、1 可行性分析科技的飞速发展,将人类带入了信息时代,计算机越来越贴近人的生活,速度成为人们成功的前提条件,以致于人们必须不断尝试着使用各种手段来提高自身的工作效率,其手段之一就是对键盘的充分利用和相应游戏软件的开发.智能型的游戏越来越深受广大游戏爱好者的喜欢.方便而快捷.黑白棋的游戏是要在一个8*8的网格中进行,而数组属于构造体类型,数组是具有相同数据类型的变量序列,序列中的每个变量成为元素,数组元素由一个统一标识的数组名和顺序好“下标”来表示。
顾需要在游戏中定义一个二维数从而实现游戏的走棋、落棋、判断棋盘的变化等。
黑白棋C语言课程设计

摘要黑白棋(REVERSI、OTHELLO),也叫苹果棋,翻转棋,是一个经典的策略性游戏。
它使用8*8的棋盘,由两人执黑子和白子轮流下棋,最后子多方为胜方。
轮到一方下棋时,必须把棋下在与对方棋子相邻的空位上,要求所下的棋子和原有的已方棋子夹住对方的至少一个棋子(横竖斜夹均可),然后把被夹住的子变成己方的颜色(也叫吃子)。
下棋过程中,任何棋子既不会从棋盘上拿走,也不会从一个格子移到另一个格子。
黑白棋规则简单,但是变化复杂,是典型的易学难精(A MINUTE TO LEARN, A LIFETIME TO MASTER),它看似简单,实际奥妙无穷。
一般说来,下棋过程中,你必须尽量削减对手的行动力,同时增加自己的行动力,这种策略我们称之为行动力原则(或行动力战术)。
当一方达到或接近这个目标时,我们就称该棋手控制了棋局。
另外,这个战术的目的是迫使对方下坏棋,如果对方虽然可选位置很少,但每一步却总有好棋,那战术目的就没有达成。
记住,你必须让对方完全无好棋可下。
黑白棋规则规定只能在对方棋子相邻的空位下棋,这就可以推出另一个原则。
对方棋子边上的空位越多,你下棋的选择也就越多,换句话说,你的行动力就越强;相反,如果你棋子边上的空位越少,对方可下的位置也就越少。
我们把相邻位置上有空位的子称为外子,反之称为内子,连在一起的外子称为前线或墙。
下棋时要尽量减少自己的外子。
关键字:黑白棋,C语言,数组,函数黑白棋游戏一、课程设计目的1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 提高运用C语言解决实际问题的能力5. 掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。
二、实验器材及实验环境硬件环境:装有Windows 2000或以上系统的微机系统软件环境:Turbo C 2.0软件三、黑白棋的总体设想1.设计思路从已知的黑白棋游戏中可知,应该用二维数组表示程序的数据,数组两个下标可以表示棋盘上的位置,数组元素的值代表棋格中的状态,共有三种情况,分别是空格、黑棋和白棋,这样给数组元素的取值设定为0、1、2。
c语言课程设计黑白棋

c语言课程设计黑白棋一、教学目标本课程的目标是让学生掌握C语言编程的基本技能,通过实现一个黑白棋游戏项目,培养学生的编程思维和实际操作能力。
具体目标如下:1.知识目标:学生能熟练使用C语言进行编程,理解基本的编程概念,如变量、数据类型、运算符、控制结构等。
2.技能目标:学生能运用C语言实现简单的逻辑控制和函数调用,具备一定的算法分析能力,能独立完成黑白棋游戏的设计与实现。
3.情感态度价值观目标:培养学生对编程的兴趣和热情,提高学生的问题解决能力,培养学生的团队合作意识和创新精神。
二、教学内容教学内容以C语言的基本概念和编程技巧为主线,结合黑白棋游戏的设计与实现,具体安排如下:1.C语言基本概念:介绍C语言的语法规则、数据类型、运算符、控制结构等基本知识。
2.函数和数组:讲解函数的定义和调用、数组的使用和操作,以及函数指针的概念。
3.黑白棋游戏设计:引导学生分析游戏需求,设计游戏界面和逻辑,实现游戏的基本功能。
4.算法分析和优化:引导学生运用算法分析游戏中的问题,如棋子的移动规则、胜负判断等,并进行优化。
5.团队合作与创新:培养学生进行团队合作,共同完成游戏项目,鼓励学生发挥创新精神,为游戏添加更多功能和玩法。
三、教学方法本课程采用讲授法、讨论法、案例分析法和实验法等多种教学方法,具体安排如下:1.讲授法:讲解C语言的基本概念和编程技巧,为学生提供系统的知识体系。
2.讨论法:学生进行团队讨论,分析游戏需求,设计游戏方案,培养学生的团队合作能力。
3.案例分析法:通过分析典型的黑白棋游戏案例,引导学生掌握游戏设计的要点和技巧。
4.实验法:学生动手编写代码,实现游戏功能,培养学生的实际操作能力和编程思维。
四、教学资源教学资源包括教材、参考书、多媒体资料和实验设备等,具体安排如下:1.教材:选用《C程序设计原理与应用》作为主讲教材,为学生提供系统的知识学习。
2.参考书:推荐《C语言程序设计》等辅助教材,供学生拓展阅读和自学。
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玩家类的抽象是非常明显的,完全模拟了现实中一个玩家的属性及行为,属性有:赢次数、输次数、拥有现金数、手上的牌。
C语言-黑白棋(人机对战)
C语⾔-⿊⽩棋(⼈机对战)1 #include <stdio.h>2 #include <stdlib.h>3/*4具体思路如下:51.定义⼀个⼆维数组chessboard[8][8],⽤于保存⿊⽩双⽅棋⼦的位置。
如果数组元素为0,表⽰该单元格未落⼦;如果是-1,表⽰该单元格是⿊⼦;如果是1,则表⽰该单元格是⽩⼦。
62.当⼀⽅下棋时,先检查是否有位置可下,如果有则⼰⽅下棋,如果没有就让对⼿下棋。
73.若玩家下,需要等待玩家输⼊棋⼦坐标,然后执⾏翻转对⼿棋⼦操作。
84.若计算机下,程序需对棋盘所有可以落⼦的位置进⾏判断,找出最佳的落⼦位置,然后执⾏翻转对⼿棋⼦操作。
95.重复步骤2~4,直到棋盘已满或双⽅都不能下⼦时结束。
10*/1112void Output(char chessboard[][8]); //显⽰棋盘中的下⼦情况13int Check(char chessboard[][8],int moves[][8],char player);//检查⼀⽅是否有位置下⼦14void PlayStep(char chessboard[][8],int row,int col,char player);//在指定位置下棋15void AutoPlayStep(char chessboard[][8],int moves[][8],char player);//计算机思考下⼦16int GetMaxScore(char chessboard[][8],char player);//获取分数17int BestPlay(char chessboard[][8],int moves[][8],char player);//最优下⼦位置181920int main(){21char chessboard[8][8];//保存棋盘中各单元格下⼦的状态22int isDown[8][8] = {0};//保存棋盘中的各个位置是否可以下⼦,可以下的位置为1,其余为023int row,col,x,y;24int iCount = 0;//以下⼦的数量25int player = 0;//下棋⽅26int SkipPlay = 0;//重置下⼦的次数为0,若为2,则表⽰双⽅都不能下⼦27int Score[2];//保存计算机和玩家的得分2829char select,ch;3031 printf("⿊⽩棋\n\n");32 printf("玩家执⿊⼦先⾏,计算机执⽩,按Enter开始\n");333435 scanf("%c",&select);3637do{3839if(player==0){40 player = 1;41 }else{42 player = 0;43 }4445for(row=0;row<8;row++){46for(col=0;col<8;col++){47 chessboard[row][col]=0;48 }49 }5051 iCount = 4;//游戏开始的四颗棋⼦52 chessboard[3][3] = chessboard[4][4] = 1;53 chessboard[3][4] = chessboard[4][3] = -1;5455 printf("\n棋盘初始状态:\n");56 Output(chessboard);5758//双⽅下棋59do{60if(player==1){//玩家下棋(⿊)61 player = 0;62if(Check(chessboard,isDown,2)){63while(1){64 fflush(stdin);65 printf("输⼊下⼦的位置(⾏,列):");66 scanf("%d%c",&x,&ch);67 x--;//因为数组是从0开始存的68if(ch>='a'){69 y = ch - 'a' + 1;70 } else{71 y = ch - 'A' + 1;72 }73 y--;74//判断是否越界、是否已有棋⼦75if(x>=0&&x<8&&y>=0&&y<8&&isDown[x][y]){76 PlayStep(chessboard,x,y,2);77 iCount++;78break;79 }else{80 printf("坐标输⼊有误,请重新输⼊。
c语言程序黑白棋设计流程
引言黑白棋的简要历史:黑白棋,又叫反棋(Reversi)、奥赛罗棋(Othello),苹果棋,翻转棋。
黑白棋起源中世纪的英国,18世纪传入日本,并在日本得到了发展。
现在,黑白棋在西方和日本很流行。
游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。
它的游戏规则简单,因此上手很容易,但是它的变化又非常复杂。
有一种说法是:只需要几分钟学会它,却需要一生的时间去精通它。
“黑白棋规则”:1)两人对奕,以轮流方式持黑子与白子。
2)开辟新局者持白子,加入者持黑子,之后以轮流方式将棋子置于棋盘格子中。
若无地方可下子,则跳过一回,由对方下子。
3)在提示的格子中,选择一个格子下子,当下子的位置与离最近的同色旗子中,若有其他棋子则中间的棋子变为与我方一样颜色。
4)当下满64个棋子,棋子多者为胜。
关于C语言:C语言是一种结构化设计语言,它兼顾有高级语言的特点和低级语言的功能。
其设计功能十分强大,既可用于编写应用软件,又可用于设计制作系统软件。
同时,C语言是一种较为通用的编程软件,在目前的软件行业中使用也是十分的广泛。
虽然C语言是面向DOS编程的,但它是计算机的底层编程工具之一。
由C语言编写的程序,它的代码质量和运行速度仅次于汇编语言编写的程序,C语言具有简单易学和可移植性好等特点,同时又具有汇编语言的特点,具有较强的生命力和广泛的应用前景。
第一章系统分析1、1 可行性分析科技的飞速发展,将人类带入了信息时代,计算机越来越贴近人的生活,速度成为人们成功的前提条件,以致于人们必须不断尝试着使用各种手段来提高自身的工作效率,其手段之一就是对键盘的充分利用和相应游戏软件的开发.智能型的游戏越来越深受广大游戏爱好者的喜欢.方便而快捷.黑白棋的游戏是要在一个8*8的网格中进行,而数组属于构造体类型,数组是具有相同数据类型的变量序列,序列中的每个变量成为元素,数组元素由一个统一标识的数组名和顺序好“下标”来表示。
顾需要在游戏中定义一个二维数从而实现游戏的走棋、落棋、判断棋盘的变化等。
C语言趣味编程演示
例如按下列方法移动棋子:
0
1
2 △
3
4 两个●连在一起产生阻塞
或4 两个○连在一起产生阻塞
“阻塞”现象就是:
在移动棋子的过程中,两个尚未到位的同 色棋子连接在一起,使棋盘中的其它棋子 无法继续移动。
产生阻塞的现象的原因是在第2步(△状态) 时,棋子○不能向右移动,只能将●向左 移动。
总结产生阻塞的原因,当棋盘出现“黑、 白、空、黑”或“白、空、黑、白”状态 时,不能向左或向右移动中间的棋子,只 移动两边的棋子。
按照上述规则,可以保证在移动棋子的过 程中,不会出现棋子无法移动的现象,且 可以用最少的步数完成白子和黑子的位置 交换
计算机解决胜这类问题的要害是要找出问题 的规律,或者说是要制定一套计算机行动的 规则。分析本题,先用人来解决问题,可总 结出以下规则: (1) 黑子向左跳过白子落入空格,转(5) (2) 白子向右跳过黑子落入空格,转(5) (3) 黑子向左移动一格落入空格(但不应产生棋 子阻塞现象),转(5) (4) 白子向右移动一格落入空格(但不应产生棋 子阻塞现萌),转(5) (5) 判定游戏是否结束,若没有结束,则转(1) 继续。
*程序与程序注释
#include<stdio.h> int number; void print(int a[ ]); void change(int *n,int *m); void main() { int t[7]={1,1,1,0,2,2,2}; /*初始化数组1:白子 2:黑子 0: 空格*/ int i,flag; print(t); while(t[0]+t[1]+t[2]!=6||t[4]+t[5]+t[6]!=3) /*判断游戏是否 结束若还没有完成棋子的交换则继续进行循环*/
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include <stdio.h>#include <conio.h>#include <time.h>void welcome();int game(int *add_money);int main(){int money=5000;welcome();while(1){if(game(&money)==0){break;}}getch();return 1;}void welcome(){printf("\n\t\tWELCOME TO CASINO\n\n");printf("\t\t 20th May 2011\n\n");}void end(int money){printf("The end of the game, you could live with RMB %d.",money);return;}int bet(int money){char ans;while(1){printf("Now you have Y%d\n",money);printf("How much you want to bet:(a:10, s:20,d:30, f:40, g:50): ");ans=getchar();flushall();switch(ans){case 'a':if(money-10<0)continue;return 1;case 's':money-=20;if(money-20<0)continue;return 2;case 'd':if(money-30<10)continue;return 3;case 'f':if(money-40<0)continue;return 4;case 'g':if(money-40<10)continue;return 5;default:printf("\nInvalid input!Input again!\n\n");}}return -1;}void shuffle(int *card,int deck){int i,j,index=0,round;for(i=1;i<=deck;i++) /*initialization: value from 1 to 104,index from 0 to 103*/ {for(j=1;j<=52;j++){card[index]=j;index++;}}for(round=1;round<=200;round++) /*swap*/{i=rand()%(52*deck);j=rand()%(52*deck);index=card[i];card[i]=card[j];card[j]=index;}return;}void deal(int* player1,int* player2,int* card){player1[0]=card[0];player1[1]=card[2];player2[0]=card[1];player2[1]=card[3];return;}void display(int card){int shape=card/13+3;int num=card%13+1;printf("%c",shape);if(num==1)printf("A ");else if(num==11)printf("J ");else if(num==12)printf("Q ");else if(num==13)printf("K ");elseprintf("%-3d",num);printf("");return;}void displayCard(int* player1, int* player2,int choice) {int index=1;if(choice==1)printf("Dealer: XX ");else{printf("Dealer: ");display(player1[0]);}while(player1[index]!=0){display(player1[index]);index++;}index=0;printf("\nPlayer: ");while(player2[index]!=0){display(player2[index]);index++;}printf("\n");return;}/*1: player1 win/more. 2: player2 win/more. 3: Push. 4: player1 win Black Jack. 5:player2 win Black Jack;6: player1 lose(bust).7: player2 lose(bust). 8: Black Jack: Push*/int checkWin(int* player1, int* player2){int sum1=0,sum2=0,index=0,num;int num1=player1[0]%13+1;int num2=player1[1]%13+1;int num3=player2[0]%13+1;int num4=player2[1]%13+1;if((num1==1&&num2>=10)||(num1>=10&&num2==1)) /*check for Black Jack*/{if((num3==1&&num4>=10)||(num3>=10&&num4==1))return 8;return 4;}if((num3==1&&num4>=10)||(num3>=10&&num4==1))return 5;while(player1[index]!=0){num=player1[index]%13+1;if(num>10)num=10;sum1+=num;index++;}index=0;while(player2[index]!=0){num=player2[index]%13+1;if(num>10)num=10;sum2+=num;index++;}if(sum1>21)if(sum2>21)return 3;elsereturn 6;if(sum2>21)return 7;if(sum1>sum2)return 1;else if(sum1<sum2)return 2;elsereturn 3;return -1;}int sumN(int* player){int sum=0,index=0;while(player[index]!=0){if(player[index]%13+1>10)sum+=10;elsesum+=player[index]%13+1;index++;}return sum;}int game(int *add_money){int betM,choice,index=4,win=-1,index1=2,index2=2,check=1;int money=*add_money;int player1[6]={0},player2[6]={0},card[104];char ans;srand(time(NULL));choice=bet(money);shuffle(card,2);deal(player1,player2,card);win=checkWin(player1,player2);if(win==4||win==5||win==8){displayCard(player1,player2,2);if(win==4){*add_money-=choice*15;if(*add_money<0)*add_money=0;printf("Dealer win! Now you have Y%d\n",*add_money);}if(win==5){*add_money+=choice*15;printf("Player win! Now you have Y%d\n",*add_money);}if(win==8)printf("Push! Now you have Y%d\n",*add_money);}else{displayCard(player1,player2,1);while(1){if(check){printf("Hit or Stand?(H/S):");ans=getchar();flushall();if(ans!='H'&&ans!='h'&&ans!='S'&&ans!='s')continue;}if(ans=='H'||ans=='h'){player2[index2]=card[index];index2++;index++;win=checkWin(player1,player2);if(win==7){*add_money-=choice*10;displayCard(player1,player2,2);printf("Player bust!\n");printf("Now you have Y%d\n",*add_money);break;}displayCard(player1,player2,1);continue;}else{while(1){if(sumN(player1)<15){/*printf("<<sum=%d>>",sumN(player1)); */player1[index1]=card[index];index1++;index++ ;}elsebreak;}check=0;}displayCard(player1,player2,2);win=checkWin(player1,player2);/*printf(">>dealer: %d player: %d<<\n",sumN(player1),sumN(player2));*/ if(win==1){*add_money-=choice*10;printf("\nDealer win! Now you have Y%d\n",*add_money);break;}if(win==2){*add_money+=choice*10;printf("\nPlayer win! Now you have Y%d\n",*add_money);break;}if(win==3){printf("\nPush\n");break;}if(win==7){*add_money+=choice*10;printf("\nDealer bust! Now you have Y%d\n",*add_money);break;}}}if(*add_money==0){end(*add_money);return 0;}return 0;}。