当前位置:文档之家› 24点游戏程序设计

24点游戏程序设计

24点游戏程序设计
24点游戏程序设计

杭州电子科技大学

2012年6月短学期

姓名:谷蒙蒙

学号:09056002

班级:09056011班

专业: 计算机科学与技术(2+2)学院:计算机学院

课题:24点游戏实现

指导老师:张彦斌

完成时间:2012.06.19

一、程序功能及规则设定

本题目将设计一个24点游戏。程序主要负责实现随机发牌、设置牌面、表达式验算、计算机给出解答、结果统计等功能。系统可随机给出4个数,也可由用户自行输入四张牌的值。用户输入表达式,先判断表达式是否正确,如果正确,计算是否24,不正确的话,给出可能的正确表达式。用户可放弃输入,由系统直接给出可能的答案

24点游戏是一种常见的纸牌游戏,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式,玩法十分简单,是一个消遣的好方法。本程序对传统24点作了一定的改变,用户不必自己手动输入表达式,程序提供相应的按钮,通过点击按钮键入表达式,方便用户操作。

二、程序实现思路

通过一定的功能分析,将程序基本化为:随机发牌,设置牌面,退出游戏,表达式键入,表达式验证,系统给出答案,判断是否无解这7个功能模块。

2.1随机发牌:产生4个随机数rand(),将4个数保存下来,对相应的按钮及图片做出对

应的处理,即显示相对应的扑克牌、修改数字按钮上显示的数字、设置按钮的可用性等。这些处理写在主窗口的私有成员函数中,名为startupCard(),其中调用较多的API函数,如载入图片loadImage()、设置按钮内容SetDlgItemText()等。

2.2设置牌面:用户自己设置扑克牌牌面(此时跳出一个设置窗口),获取用户输入的数字,

其余操作与随机发牌操作相同,调用startupCard()完成。

2.3退出游戏:弹出关闭提示窗口,询问用户事故否确认退出。点击确定,则退出;点击

取消,则返回,继续游戏。

2.4表达式键入:设置4个数组、加、减、乘、除、左括号、右括号、清除、完成等按钮,

并且一定时期某些按钮可用,某些按钮不可用。其规则如下:1)程序开始时,只有数字及左括号可用;2)当按下数字按钮时,加减乘除按钮可用,若前面输入过左括号,则右括号可用;3)当按下左括号时,只有未使用的数字可用;4)当按下加减乘除时,未使用的数字及左括号可用;5)当按下右括号时,未使用的数字、加减乘除、右括号可用;6)当按下数字或右括号按钮,且数字都已经使用,左右括号匹配,此时完成按钮可用;7)清除按钮用于清除已键入的表达式。关于按钮可用性设置利用EnableWindow()函数来实现。

2.5表达式验证:即计算用户输入的表达式,首先获取表达式GetDlgItemText(),根据加

减乘除运算法则,使用C++ STL库所提供的栈,进行表达式计算,验证用户输入的是否等于24。

算法思路:(1) 运算符的优先级处理。为根据运算符的优先级对表达式进行运算,引入优先级最低的运算符“;”,该运算符不参加实际的运算,只出现在表达式的开始和最后,仅起到保证表达式的其他运算符运算完为止的作用。由此,规定运算符从低到高的优先级依次为:0级:‘;’,1级:‘)’,2级:‘+’和‘-’,3级:‘*’和‘/’,4级:‘(’。

(2) 运算过程中的运算符和运算数的操作处理。在从左到右依次读入表达式字符串中字符的过程中,若遇到连续若干个数码字符就转换为数值,并将其入运算数栈;若遇到运算符,当该运算符的优先级高于运算符栈顶的运算符时,将该运算符入运算符栈,否则弹出运算数栈顶的两个元素依次作为右边和左边的运算数,弹出运算符栈顶的元素作为运算符进行运算,将结果入栈到运算数栈。但要注意以下情况:

①读入的运算符‘)’不入运算符栈;

②当运算符栈顶是运算符‘(’时,读入的运算符除‘)’外均入栈;

③当读入的运算符是‘)’而运算符栈顶是‘(’时,运算符栈退栈;

④当读入的是运算数或是运算符而入栈了或是运算符‘)’而运算符栈顶是‘(’时,继续读入下一字符,否则不能读入下一字符。

(3) 比较运算符的优先级算法。根据存于一维数组中的运算符极其优先级,对运算符栈顶的运算符与读入的运算符比较其优先级,返回响应的信息。

(4) 核心算法:完成表达式的求值并输出响应的操作及运算符栈和运算数栈的变化状态。对依次从表达式字符串读入的字符,若是数码字符,则将连续的若干个数码字符转换成数值后,入栈到运算数栈;否则,若是运算符且不是‘)’:则当该运算符的优先级比运算符栈顶的运算符优先级高或运算符栈顶的运算符是‘(’时,该运算符入运算符栈,继续读入后续字符;否则,若是运算符且是‘)’,而运算符栈顶是‘(’时,运算符栈退栈,继续读入后续字符;否则,弹出运算数栈顶的两个元素依次作为右边和左边的运算数,弹出运算符栈顶的元素作为运算符进行运算,将结果入栈到运算数栈,此时,如果当前运算符的优先级高于运算符栈顶元素的优先级,则当前运算符入运算符栈,继续读入后续字符,如果表达式已读完而且运算符栈已空,则继续读入后续字符。以上各种情况处理完后,均输出响应的操作及运算符栈和运算数栈的变化状态。最后返回表达式的运算结果——运算数栈中唯一的一个数据。

2.6系统给出答案:使用递归的方式,达到穷举的效果求24点的解

算法思路:首先,从宏观上说,这种问题都是遍历穷举。再看看运算符,其中+,* 都是没有顺序的。即(a*b=b*a), 但是-、/ 是有顺序的。那么假设都有顺序的。那么就可以统一处理了(最多效率低点,先解决问题。再考虑优化)。那么遍历所有a,b,c,d 以

及三次运算。即A(4,4) *4*4*4 就是该算法的复杂度。

微观上,由于中间有除法,那么不能用int类型来储存数据了。需要用double或者float.每次运算都只有两个数运算。

2.7判断是否无解:同样系统计算答案,判断有没有解

三、程序流程图

四、程序调试

4.1图片显示:图片导入难以实现,不断修改、查阅信息、修改完成。

4.2表达式求值算法:计算结构有误。原因为运算符优先级设置不正确,如加号和减号

的优先级相同,乘号和除号的优先级相同。

4.3按钮可用性设定:不可连续输入括号,如:((6+6)+6)+6,是正确的解,但是无

法输入,修改了按钮可用性设定的规则:当按下左括号时,左括号仍可用,并且,

四个数字都使用了以后,系统自动完成括号匹配的工作。

4.4有待改进的地方:程序经常出现闪屏现象,可以增加定时、难度级别设置的功能。

五、部分截图

5.1主界面:

5.2设置牌面:

5.3退出游戏:

六、部分关键代码(完整请见poin24工程)

/*计算表达式*/

i nt calculate(CString &expression)

{

string str= expression.GetBuffer(0);//将CString转换成string类型str+=";"; //添加分号,作为表达式结束

stack Sign; //运算符栈

stack Num; //数字栈

Sign.push(';'); //分号压入栈底

int pos = 0; //从0号为开始读取表达式

char current = str[0], topSign;//当前字符

while(Sign.top() != ';' || current != ';'){

int num = apartNum(str,pos); //拆分数字与字符

if(num != -1) //读取出数字,添加到数字栈中

Num.push(num);

else{ //读取出运算符

current = str[pos]; //当前字符

pos++; //继续下次循环

topSign = Sign.top();//得到当前栈顶的运算符

if(current == ')' && topSign=='(')//当前读到右括号,栈顶为左括号Sign.pop(); //直接弹出左括号

else if(current != ')' && cmpPriority(current, topSign)

|| topSign == '(')

Sign.push(current); //将当前运算符压栈

else{

int a,b,c;

a = Num.top(); //得到数字栈栈顶元素

Num.pop();

b = Num.top(); //得到第二个数字

Num.pop();

topSign = Sign.top(); //弹出运算符

Sign.pop();

if(topSign == '+') c = a + b; //加法

else if(topSign == '-') c = b - a; //减法

else if(topSign == '*') c = a * b; //乘法

else if(topSign == '/') c = b / a; //除法

else return -1;

Num.push(c); //将新的数存入数字栈中

topSign = Sign.top(); //得到符号栈栈顶运算符

pos--; //向前退一个,继续操作当前的运算符

}

}

current = str[pos]; //下一轮的当前字符

}

return Num.top();

}

/*系统计算24点的解*/

bool search(int n, int* number, string* expression)

{

if (n == 1) {

if ( fabs(number[0] - 24) < PRECISION ) { //精度范围内,表达式正确//cout << expression[0] << endl; //输出表达式

return true;

}

else {

return false;

}

}

//穷举法,递归调用求表达式

for (int i = 0; i < n; i++) {

for (int j = i + 1; j < n; j++) {

double a, b;

string expa, expb;

a = number[i];

b = number[j];

number[j] = number[n - 1];

expa = expression[i];

expb = expression[j];

expression[j] = expression[n - 1];

expression[i] = '(' + expa + '+' + expb + ')'; //加法

number[i] = a + b;

if ( search(n - 1, number, expression) ) return true;

expression[i] = '(' + expa + '-' + expb + ')'; //减法

number[i] = a - b;

if ( search(n - 1, number, expression) ) return true;

expression[i] = '(' + expb + '-' + expa + ')'; //减法

number[i] = b - a;

if ( search(n - 1, number, expression) ) return true;

expression[i] = '(' + expa + '*' + expb + ')'; //乘法

number[i] = a * b;

if ( search(n - 1, number, expression) ) return true;

if (b != 0) {

expression[i] = '(' + expa + '/' + expb + ')'; //除法

number[i] = a / b;

if ( search(n - 1, number, expression) ) return true;

}

if (a != 0) {

expression[i] = '(' + expb + '/' + expa + ')'; //除法

number[i] = b / a;

if ( search(n - 1, number, expression) ) return true;

}

number[i] = a;

number[j] = b;

expression[i] = expa;

expression[j] = expb;

}

}

return false;

}

/*数字按钮按下时,表达式相关的按钮的可用性的设置*/

void CPoint24Dlg::OnNumone() //第一个数字

{

m_visitNum[0] = true; //第一个数已使用

CString expression, num;//获取已输入的表达式

GetDlgItem(ID_EXPRESSION)->GetWindowText(expression);

GetDlgItem(IDC_NUMONE)->GetWindowText(num);//获取当前输入的数字expression += num; //将新输入的数字添加到表达式中

SetDlgItemText(ID_EXPRESSION, expression);//将新表达式显示到文本框中if(!allVisited()){

GetDlgItem(IDC_ADD)->EnableWindow(TRUE);

GetDlgItem(IDC_SUB)->EnableWindow(TRUE);

GetDlgItem(IDC_MUL)->EnableWindow(TRUE);

GetDlgItem(IDC_DIV)->EnableWindow(TRUE);

}

else{

for(int i = 0; i < m_leftCnt; i++)

expression += ")";

m_leftCnt = 0;

SetDlgItemText(ID_EXPRESSION, expression);

}

if(allVisited() && m_leftCnt == 0)

GetDlgItem(IDC_COMPLETE)->EnableWindow(TRUE); //完成按钮可用

GetDlgItem(IDC_NUMONE)->EnableWindow(FALSE);//数字按钮不可用

GetDlgItem(IDC_NUMTWO)->EnableWindow(FALSE);

GetDlgItem(IDC_NUMTHREE)->EnableWindow(FALSE);

GetDlgItem(IDC_NUMFOUR)->EnableWindow(FALSE);

GetDlgItem(IDC_LEFTBRACKET)->EnableWindow(FALSE); //左括号不可用if(m_leftCnt > 0) //前面出现过左括号,则右括号可用

GetDlgItem(IDC_RIGHTBRACKET)->EnableWindow(TRUE);

}

/*按下加减乘除键时,表达式相关的按钮的可用性的设置*/

void CPoint24Dlg::OnAdd() //加号

{

CString expression, sign; //获取已输入的表达式

GetDlgItem(ID_EXPRESSION)->GetWindowText(expression);

GetDlgItem(IDC_ADD)->GetWindowText(sign); //获取新输入的运算符expression += sign; //将新输入的运算符添加到表达式中

SetDlgItemText(ID_EXPRESSION, expression);//将新表达式显示到文本框中

if(!m_visitNum[0]) / /未使用的数字按钮可用

GetDlgItem(IDC_NUMONE)->EnableWindow(TRUE);

if(!m_visitNum[1])

GetDlgItem(IDC_NUMTWO)->EnableWindow(TRUE);

if(!m_visitNum[2])

GetDlgItem(IDC_NUMTHREE)->EnableWindow(TRUE);

if(!m_visitNum[3])

GetDlgItem(IDC_NUMFOUR)->EnableWindow(TRUE);

GetDlgItem(IDC_LEFTBRACKET)->EnableWindow(TRUE); //左括号可用

GetDlgItem(IDC_RIGHTBRACKET)->EnableWindow(FALSE); //右括号不可用GetDlgItem(IDC_ADD)->EnableWindow(FALSE); //运算符不可用

GetDlgItem(IDC_SUB)->EnableWindow(FALSE);

GetDlgItem(IDC_MUL)->EnableWindow(FALSE);

GetDlgItem(IDC_DIV)->EnableWindow(FALSE);

}

/*按下左括号键时,表达式相关的按钮的可用性的设置*/

void CPoint24Dlg::OnLeftbracket() //左括号

{

CString expression, sign;

GetDlgItem(ID_EXPRESSION)->GetWindowText(expression); //获取已输入的表达式

GetDlgItem(IDC_LEFTBRACKET)->GetWindowText(sign); //获取新输入的运算符

expression += sign;//将新输入的运算符添加到表达式中

SetDlgItemText(ID_EXPRESSION, expression); //将新表达式显

示到文本框中

m_leftCnt ++;//左括号计数器加1

if(!m_visitNum[0])

GetDlgItem(IDC_NUMONE)->EnableWindow(TRUE);//未使用的数字按钮可用

if(!m_visitNum[1])

GetDlgItem(IDC_NUMTWO)->EnableWindow(TRUE);

if(!m_visitNum[2])

GetDlgItem(IDC_NUMTHREE)->EnableWindow(TRUE);

if(!m_visitNum[3])

GetDlgItem(IDC_NUMFOUR)->EnableWindow(TRUE);

GetDlgItem(IDC_LEFTBRACKET)->EnableWindow(TRUE); //左括号可用

GetDlgItem(IDC_RIGHTBRACKET)->EnableWindow(FALSE); //右括号不可用GetDlgItem(IDC_ADD)->EnableWindow(FALSE); //运算符不可用

GetDlgItem(IDC_SUB)->EnableWindow(FALSE);

GetDlgItem(IDC_MUL)->EnableWindow(FALSE);

GetDlgItem(IDC_DIV)->EnableWindow(FALSE);

}

/*按下右括号键时,表达式相关的按钮的可用性的设置*/

void CPoint24Dlg::OnRightbracket() //右括号

{

CString expression, sign;

GetDlgItem(ID_EXPRESSION)->GetWindowText(expression); //获取已输入的表达式

GetDlgItem(IDC_RIGHTBRACKET)->GetWindowText(sign); //获取新输入的运算符

expression += sign;//将新输入的运算符添加到表达式中

SetDlgItemText(ID_EXPRESSION, expression); //将新表达式显示到文本框中

m_leftCnt --;

GetDlgItem(IDC_NUMONE)->EnableWindow(FALSE);//数字按钮不可用

GetDlgItem(IDC_NUMTWO)->EnableWindow(FALSE);

GetDlgItem(IDC_NUMTHREE)->EnableWindow(FALSE);

GetDlgItem(IDC_NUMFOUR)->EnableWindow(FALSE);

GetDlgItem(IDC_LEFTBRACKET)->EnableWindow(FALSE); //左括号不可用if(m_leftCnt > 0)

GetDlgItem(IDC_RIGHTBRACKET)->EnableWindow(FALSE); //前面出现过左括号,则有括号可用

GetDlgItem(IDC_ADD)->EnableWindow(TRUE);

GetDlgItem(IDC_SUB)->EnableWindow(TRUE);

GetDlgItem(IDC_MUL)->EnableWindow(TRUE);

GetDlgItem(IDC_DIV)->EnableWindow(TRUE);

if(allVisited() && m_leftCnt == 0)

GetDlgItem(IDC_COMPLETE)->EnableWindow(TRUE); //完成按钮可用

}

/*开始设置*/

void CPoint24Dlg::startupCard() //修改数字按钮上的显示信息

{

m_leftCnt = 0; //左括号计数器为0

SetDlgItemText(ID_EXPRESSION, ""); //清空表达式栏

GetDlgItem(IDC_NUMONE);

SetDlgItemText(IDC_NUMONE, m_buff[0]); //将数字显示到按钮中

SetDlgItemText(IDC_NUMTWO, m_buff[1]);

SetDlgItemText(IDC_NUMTHREE, m_buff[2]);

SetDlgItemText(IDC_NUMFOUR, m_buff[3]);

fill(m_visitNum, m_visitNum+4, false); //访问标志初始化为:未访问

GetDlgItem(IDC_NUMONE)->EnableWindow(TRUE);//数字按钮可用

GetDlgItem(IDC_NUMTWO)->EnableWindow(TRUE);

GetDlgItem(IDC_NUMTHREE)->EnableWindow(TRUE);

GetDlgItem(IDC_NUMFOUR)->EnableWindow(TRUE);

GetDlgItem(IDC_GIVEUP)->EnableWindow(TRUE); //放弃按钮可用

GetDlgItem(IDC_NOANSWER)->EnableWindow(TRUE); //无解按钮可用

GetDlgItem(IDC_COMPLETE)->EnableWindow(FALSE);

GetDlgItem(IDC_LEFTBRACKET)->EnableWindow(TRUE);

CPaintDC pDC(this);

CRect rect;

CBitmap card[4],*OldBitMap;

CDC *dc,dcMem;

dc=GetDC();

for(int i = 0; i< 4; i++){ //创建一个与指定设备兼容的内存设备上下文环境(DC)dcMem.CreateCompatibleDC(&pDC);

card[i].LoadBitmap(m_pattern[m_op[i]]); //加载图片

OldBitMap=dcMem.SelectObject(&card[i]);

// dc->BitBlt(20+100*i,20,500,1000,&dcMem,0,0,SRCAND);

BITMAP bm;

(&card[i])-> GetBitmap(&bm);

dc->StretchBlt( 25+108*i, 20, 105, 175, &dcMem,//显示图片

0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);

dcMem.SelectObject(OldBitMap);

DeleteObject(&card[i]);

dcMem.DeleteDC();

}

}

/*无解按钮的响应事件*/

void CPoint24Dlg::OnNoanswer()

{

// TODO: Add your control notification handler code here

m_totalCnt ++;

string expression[4];

for(int i = 0; i < 4; i++){

expression[i] = m_buff[i];

}

if(search(4, m_op, expression)){ //24点求解

CString str;

str.Format("%s", expression[0].c_str()); //格式化

str += " = 24 ";

AfxMessageBox("回答错误!此局有解,如:" + str); //提示窗口}

else{

m_rightCnt ++;//答对次数加1

AfxMessageBox("回答正确!此局无解!重新开牌...");

}

displayCnt(); //显示统计结果

startupCard(); //重新开局

}

/*完成按钮的响应事件*/

void CPoint24Dlg::OnComplete()

{

// TODO: Add your control notification handler code here

m_totalCnt ++; //回答次数加1

CString expression, totalResult;

GetDlgItemText(ID_EXPRESSION, expression); //得到表达式

int result = calculate(expression); //计算表达式

char strResult[10];

itoa(result, strResult, 10); //类型转化

expression += " = ";

expression += strResult;

if(result == 24){

m_rightCnt ++;//答对次数加1

AfxMessageBox(expression + "\n" + "恭喜你回答正确!重新开始下一轮...");

OnStart(); //重新开始

}

else{

AfxMessageBox(expression + "\n" + "对不起!你的回答不正确,请重试!\n你可以点击放弃查看答案!");

startupCard(); //重新设置

}

displayCnt();//显示统计信息

}

//开始游戏

void CPoint24Dlg::OnStart()

{

SetDlgItemText(ID_EXPRESSION, "");

SetDlgItemText(IDC_RESULT, "");

srand((unsigned long)time(0)); //随即种子

for(int i = 0; i < 4; i++){

m_op[i] = rand() % 13 + 1;//产生1-13之间的随机数

itoa(m_op[i], m_buff[i], 10); //将随机数转换成字符串

}

startupCard(); //数字设置按钮上的内容

}

void CPoint24Dlg::OnExit() //退出游戏

{

CEndDlg endDlg; //打开结束框

endDlg.DoModal();

}

void CPoint24Dlg::OnRestart()

{

CSetNumberDlg setNumberdDlg; //打开设置卡片数值的框

while(1){

int nResponse = setNumberdDlg.DoModal();

if(nResponse == IDOK ){

int * temp = setNumberdDlg.getOp();

//输入的牌面数字不在1-13之间,则重新输入

if(temp[0] > 13 || temp[0] <1 || temp[1] > 13 || temp[1] <1 || temp[2] > 13 || temp[2] <1 || temp[3] > 13 || temp[3] <1 ){

AfxMessageBox("输入的数字必须在1-13之间\n存在非法数字,请重新输入!");

continue;//输入数字不合法,重新输入

}

else break; //数字合法,结束循环

}

else

return;

}

setCardNum(setNumberdDlg.getOp());//设置扑克的值

}

/*放弃按钮响应事件*/

void CPoint24Dlg::OnGiveup()

{

m_totalCnt ++;

m_giveupCnt ++;

string expression[4];

for(int i = 0; i < 4; i++){ //把十进制的x转换成String类型

expression[i] = m_buff[i];

}

if(search(4, m_op, expression)){ //24点求解

CString str;

str.Format("%s", expression[0].c_str());//格式化

str += " = 24 ";

AfxMessageBox("答案为:" + str + "\n 重新开牌");

}

else{

AfxMessageBox("此局无解!重新开牌...");

}

displayCnt(); //显示统计信息

startupCard();

}

七、个人总结

在本次编程实训中,主要学习了两个算法,一个是算术表达式的求值,另一个是四个数的24点求解。中间有许多细节的部分容易被忽略,从而导致进度减慢。在使用MFC时,许多API函数都比较陌生,边查阅使用方法,边进行程序的编写,尤其在载入图片上,花了比较大的功夫,用了网上提供的很多方法都不适用,最终将图片导入工程、加载、显示,达到了预期的效果。

贪吃蛇游戏课程设计实验报告全解

辽宁科技大学课程设计说明书 设计题目:基于C#的贪吃蛇游戏 学院、系:装备制造学院 专业班级:计算机科学与技术 学生姓名:叶佳佳 指导教师:丁宁 成绩: 2015年12月12日

目录 一、概述 (1) 1、用C#实现该设计的方法 (1) 2、贪吃蛇游戏说明 (1) 二、实验目的及设计要求 (1) 1、实验目的 (1) 2、实验要求 (2) 三、课程设计具体实现 (2) 1、概要设计 (2) 1.1、设计思想 (2) 1.2、主模块实现 (2) 1.3、主函数流程图 (4) 2、详细设计 (5) 2.1、设计思想 (5) 2.2、具体模块实现: (5) 四、调试过程及运行结果 (10) 1、调试过程 (10) 2、实验结果 (11) 五、实验心得 (12) 六、参考资料 (13) 七、附录:源代码 (13)

一、概述 1、用C#实现该设计的方法 首先应该了解设计要求,然后按照功能设计出实际模块,每个模块都要完成特定的功能,要实现模块间的高内聚,低耦合。设计模块是一个相当重要的环节,模块的数量不宜太多,也不宜太少,要是每个模块都能比较简单的转换成流程图。模块设计完成后,就该给每个模块绘制流程图。流程图要尽可能的简单且容易理解,多使用中文,补一些过长的代码,增加理解难度。此外,流程图应容易转换成代码。 根据流程图编写好代码后在WindowsXP操作系统,https://www.doczj.com/doc/3814015408.html,2008开发环境下进行运行测试,检查错误,最终设计出可行的程序。 2、贪吃蛇游戏说明 游戏操作要尽可能的简单,界面要尽可能的美观。 编写程序实现贪吃蛇游戏,贪吃蛇游戏是一个深受人们喜欢的游戏:一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被吃掉,这时蛇的身体长一节,同时计10分;接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁、障碍物或身体交叉(蛇头撞到自己的身体),则游戏结束。游戏结束时输出相应得分。 具体要求有以下几点: (1)对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理; (2)系统设计要实用,采用模块化程序设计方法,编程简练、可用,功能全面; (3)说明书、流程图要清楚; 二、实验目的及设计要求 1、实验目的 .NET课程设计是教学实践环节中一项重要内容,进行此课程设计旨在掌握基础知识的基础上,进一步加深对VC#.NET技术的理解和掌握; 提高和加强学生的计算机应用及软件开发能力,使学生具备初级程序员的基本素质; 培养学生独立分析问题、解决问题、查阅资料以及自学能力,以适应信息管理行业日新 1

《贪吃蛇游戏课程设计》报告资料整理

贪吃蛇游戏程序设计 一、课程设计任务 贪吃蛇小游戏程序设计 二、设计要求 通过游戏程序设计,提高编程兴趣与编程思路,巩固C语言中所学的知识,合理的运用资料,实现理论与实际相结合。 (1).收集资料,分析课题,分解问题,形成总体设计思路; (2).对于设计中用到的关键函数,要学会通过查资料,弄懂其用法,要联系问题进行具体介绍; (3).上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能正常运行; (4).完成课程设计报告,并进行答辩 三、需求分析 3.1、程序功能 贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。

3.2、设计思想 程序关键在于表示蛇的图形及蛇的移动。用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现与消失也是画矩形块和覆盖矩形块。为了便于理解,定义两个结构体:食物与蛇。

3.3、流程图

四、设计的具体实现 (1)函数定义 函数定义是对各个基础函数的定义,并且设置需要运用的信息,便于调用 #define N 200 #define M 200 #include"graphics.h" #include #include #include #include #include #include #include #define LEFT 97//A #define RIGHT 100//D #define DOWN 115//S #define UP 119//W #define Esc 0x011b int i,key; int score=0; int gamespeed=250;//游戏速度可根据实际情况自行调整 struct Food { int x;//食物的横坐标 int y;//食物的纵坐标 int yes;//判断是否要出现食物的变量 }food;//食物的结构体 struct Snake { int x[M]; int y[M]; int node;//蛇的节数 int direction;//蛇的移动方向 int life;//蛇的生命,0表示活着,1表示死亡 }snake; void Init();//图形驱动

游戏24点课程设计报告

游戏24点课程设计报告 一.题目: 分析类: 计算24点:任意输入4位数字,利用+,-,*,/四则运算使之得到结果 24。输出所有不同算法的计算表达式,可为运算优先级而使用括号。 二.问题分析: 1.全面性: 此问题要求输出结果为24的计算表达式,并且要求输出要全面,我考虑用for循环与递归实现遍历来保证输出的全面性,考虑到递归的‘一归到底',每一次完整递归都代表一种算法(详情见算法)。 2.输出的判定和四位数字的类型: 在输出的时候对最后结果等于24的判别,因为考虑到有除法,有可能中途结果可能会出现不能整除的情况与小数,所以输出的四个数都设为float型,且输出判定的时候用近似判定法,而不直接写让最后结果等于24(详情见算法)。 3.重复性: 如果用循环与递归保证了输出24的表达式的全面性,但不可避免的会出现重复,才开始我想在遍历与递归时,加一些限定条件来消除重复但是这样做不但会出错,还不能保证它的输出全面性。于是我想在输出的时候加限定条件,使重复的只输出一遍。 但是对于输入的那4位数字中如果有重复的话,程序结果还是会出现重复的,此问题尚未解决.(详情见算法)。 4.括号问题的处理: 对于括号问题,我规定对每一步的计算表达式,除了*之外,+,-,\都加上括号,即让程序按自己规定的方向执行,输出的括号只是让人能看懂,其实在运算时不起作用(详情见算法)。 5.输出: 输出方面我以为用了遍历所以在每一层遍历都把运算表达式存到一个较大的数组中,在输出的时候如果满足输出条件(在遍历时纪录每次递归的第一次运算的结果,第一次运算的运算符,第二次运算的结果,第二次运算的运算符和第三次运算的运算符),就直接把那个数组里的内容输出,遍历会直接去寻找表达式里的表达式(详情见算法)。 三.算法描述(源代码里有更详尽解释): 1.主要方法: 遍历与递归。 2.主要思路: 把输入的四个数放在一个数组n[4]中,然后任取其中任意两个(不能取同一个--既不能出现自己和自己运算的情况),然后用一个for和一个switch语句来实现这两个数的加减乘除运算,然后把运算的结果放到另一个数组b[4]中并记录此运算的表达式(放到一个大一点的数组tm[4][25]中),同时把其他两个没用到的数也放到该数组中,然后重复以上过程(用遍历实现),最后先判定是不是最后一层运算,是的话在判定最后结果是不是等于24,等于24的话就把那个纪录运算式的数组输出。然后考虑到不能出现重复的(例如:1*2*3*4和2*4*3*1等等)我在遍历的同时记录了第一次运算的结果,第一次运算的运算符,第二次运算的结果,第二次运算的运算符和第三次运算的运算符,对输出的时候做限定(例如:对运算符全*的只输出一遍等等)。在有一次输出后我还定义了另外两个数组用来分别保存上一次输出的第一次运算的结果,第一次运算的运算符,第二次运算的结果,第二次运算的运算符和第三次运算的运算符,来解决重复输出的问题,不过此种做法有可能导致输出的时候不全。(此问题尚未解决)即还不能同时保证全面性与不重复性。 3.主要函数与数组:

数电课程设计报告 乒乓球游戏设计

电子线路综合设计 乒乓球比赛模拟及计分器设计 2014年6月

摘要 在信息社会高速发展的今天,数字电路芯片已经实现高度集成化,并逐步渗透到医学、计算机等各个领域,对人类的生活有着深远的影响。本设计采用基本门电路以及74LS系列芯片的搭建,以multisim 12.0软件为平台进行仿真,实现了对乒乓球游戏的模拟。主要解决的问题有: (1)模拟乒乓球的轨迹:用双向移位4位寄存器74194以及基本门电路实现;(2)球速的调节:利用555电路实现; (3)球被击中、犯规的判断; (4)计数器的使用:采用74LS90和74LS161的组合,给玩家计分; (5)关于比分的显示:通过CD4511译码芯片将计数器的输出状态显示到2位共阴极数码管上。 关键词:双向移位4位寄存器、555电路、译码电路、计数器系统

目录 1 设计任务 (1) 2 电路整体设计 (2) 2.1 译码显示电路设计 (4) 2.2 555定时器组成脉冲发生器 (5) 2.3模拟乒乓球电路的设计 (6) 3 电路整体性能的检测 (7) 3.1 译码显示电路的检测 (7) 3.2 脉冲发生器电路的检测················································································· 3.3模拟乒乓球电路的检测··················································································4实验结论····················································································································5课程设计心得体会以及建议····················································································6 Abstract ······················································································································7附录(包含元器件清单以及各元器件功能表) ······················································8参考文献····················································································································

算24点小游戏

研究生课程论文 课程名称C++面向对象程序设计 授课学期2013 学年至2014 学年 第一学期 学院电子工程学院 专业电子与通信 学号 姓名 任课教师 专题算24点小游戏 交稿日期2014年01月10日 成绩 阅读教师签名 日期 广西师范大学研究生学院

目录 1 引言 (2) 1.1 设计任务与要求 (2) 1.2 设计目的 (2) 1.3 C++面向对象语言简介 (2) 2 C++课程设计原理及方案选择 (3) 2.1 概述 (3) 2.1.1 方案设计与论证 (3) 2.2 二十四点游戏的原理 (4) 2.2.1 主函数设计 (4) 2.2.2 子函数的设计 (4) 2.2.3 类体的设计 (5) 3 程序流程及演示 (6) 3.1 程序流程图,程序清单与调用关系 (6) 3.2 程序 (7) 3.3 运行结果 (9) 4 结论 (10)

1引言 随着网络技术的发展,小游戏在网络发展如火如荼。二十四点小游戏是一个不仅能放松认得神经而且益智的趣味小游戏。对于21世纪的今天,作为一个社会工作者来说,面对日益剧烈的竞争,工作压力都是很大的,为了释放压力就需要一个很好的减压平台,那么网络上的小游戏首当其冲,24点小游戏受到了欢迎。 1.1设计任务与要求 题目要求在输入4个数后,程序对这个4个数进行运算,若能计算出结果等于24,即输出运算过程。目标是在输入四个数之后,先进行全排列,然后进行全运算,从而最终得到结果以输出。 1.2设计目的 本次设计的目的就是在掌握c++编程语言和visual c++编译软件的基础上。完成一个算24的小游戏程序设计,在系统提示下输入4个数后,程序对这4个数进行运算,若能计算出结果等于24,即输出运算过程。程序设计目标很明确,在输入4个数之后,先进行全排列,然后进行全运算,重而得到最终结果输出。 1.3C++面向对象语言简介 C++是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。其编译器比目前其他计算机语言的编译技术更复杂。类是C++中十分重要的概念,它是实现面向对象程序设计的基础。类是所有面向对象的语言的共同特征,所有面向对象的语言都提供了这种类型。一个有一定规模的C++程序是由许多类所构成的。 C++支持面向过程的程序设计,也支持基于对象的程序设计,又支持面向对象的程序设计。以后我们将介绍基于对象的程序设计。包括类和对象的概念、类的机制和声明、类对象的定义与使用等。这是面向对象的程序设计的基础。基于对象就是基于类。与面向过程的程

猜数字游戏课程设计报告

XXXX学校 《C程序设计》 课程设计报告 设计题目:猜数字游戏 附录完整源代码 专业: 班级: 学生: 学号: 指导教师: 起止时间: xxx.x.x -xxx.x.x xxxx-xxxx年 xx 学期

目录 1 、程序设计描述 1.1 程序设计目的: 1.2 程序设计要求: 1.3、猜数字游戏的简介: 2 、程序设计内容: 2.1、游戏主要框架图: 2.2、开始游戏框架: 2.3、最佳排行框架: 2.4、游戏操作说明模块: 2.5、退出游戏系统: 2.6、游戏系统总流程图: 3、猜数字游戏源代码: 3.1、void main()函数函数功能: 3.2、void game();//双人游戏 void pgame();//单人游戏 3.4、排行榜模块函数功能: 3.5、继续游戏模块函数功能: 3.6、操作说明模块函数功能: 4、调试与测试: 4.1、调试方法 4.2、测试结果的分析与讨论 4.3、测试过程中遇到的主要问题及采取的解决措施 5、程序具体说明书: 6、程序设计心得: 7、参考文献

1 、程序设计描述 1.1 程序设计目的: 综合使用所学过的C语言程序设计知识,掌握结构化程序设计的基本思路和方法,利用所学的基本知识和技能,发挥自学能力和查找资料的能力,解决稍微复杂的结构化程序设计问题,加深对所学知识的理解与掌握,增强学生利用自己所学知识解决实际问题的能力,为以后的程序开发打下基础。 1.2 程序设计要求: 1、巩固和加强《C语言程序设计》课程的理论知识。 2、掌握C语言的基本概念、语法、语义和数据类型的使用特点。 3、掌握C语言程序设计的方法及编程技巧,能正确使用C语言编写程序。 4、进一步理解和运用结构化程设计的思想和方法;学会利用流程图。 5、掌握调试程序的基本方法及上机操作方法。 6、掌握书写程设计开发文档的能力,学会撰写课程设计总结报告。课程设计的思想和方法还可以作为做毕业论文时的参考资料。 7、通过查阅手册和文献资料,培养独立分析问题和解决问题的能力。为做毕业设计打好基础。 8、培养自己的创新能力和创新思维。可以根据指导书和相关文献上的参考算法,自己设计出相应的应用程序。 9、培养自己良好的程序设计风格。在实际编程中,为了提高编程质量,对空行、空格和注释均有要求。在课程设计书写代码时,应该严格按要求处理,以便建立良好的程序设计风格。 1.3、猜数字游戏的简介: 猜数字游戏(又称 Bulls and Cows )是一种大概于20世纪中期兴起于的益智类小游戏。一般由两个人玩,也可以由一个人和电脑玩,在纸上、在网上都可以玩。这种游戏规则简单,但可以考验人的严谨和耐心。 2 、程序设计内容: 2.1、游戏主要框架图: 该模块为玩家提供猜数字游戏的主体功能,即开始游戏、继续游戏、最佳排行、操作说明、退出游戏。给用户一个清晰明了的操作界面!流程图如下:

计算24点游戏c++

24点游戏软件的开发 1 概述 1.1 课程设计目的 a、巩固并加深学生对C++语言程序设计知识的理解; b、培养学生面向对象的程序设计思想,使学生认识面向过程和面向对象两种设计方法的区别; c、进一步掌握和应用VC++ 6.0集成开发环境; d、提高运用C++语言解决实际问题的能力; e、初步掌握开发小型实用软件的基本方法,能独立设计、实现基本的MIS系统; f、掌握书写程序设计开发文档的能力(书写课程设计实验报告)。 1.2 课程设计内容 课题名称:24点游戏软件的开发 说明:24点游戏是一种常见的纸牌游戏说明 要求: a)实现随机发牌; b)能进行结果验算; c)计分; d)难度设置。 2 系统需求分析 2.1 系统目标 24点游戏是个流行的数学运算游戏。本次课程设计通过24点游戏来加深我们对对话框编程的认识和理解,并介绍Visual C++在数学计算方面的应用,以及在按钮上设置位图和设置计时器的方法。 24点扑克游戏的规则是:由系统发出4张扑克牌,要求用户利用扑克牌上显示的数字(JQKA算10),通过加减乘除运算得出24。 2.2 主体功能 a.对游戏设计三个难易级别,分别为低级、中级和高级。每次开始游戏前可以根据玩家的需要进行难度设置,如若不设置,系统默认难度级别为中级,设置完难度级别之后就可以开始游戏了,单击“发牌”按钮,桌面上出现四张翻开的扑克牌,与此同时,游戏开始计时,进度条开始前进。 b.在规定的时间内,玩家可以在“输入算式”的编辑框中输入自己想好的算式,然后点击“验算”按钮:如果输入的算式经运算后所的答案正确,则会在编辑框中

显示“正确!”;如果输入的数字与给出的牌的数字不符或者符号不合法,则会弹出“内部错误!”的窗口;如果输入的数字与四张牌相符、字符亦合法但是答案不正确,则会在编辑框中显示“错误”;如果未输入任何的数字和算符,则会弹出“内部错误!”的窗口。 c.如果在规定的时间内,玩家没有点击验算按钮,则会弹出“内部错误”的窗口。 d.在结束本轮游戏后,如果玩家想继续游戏,则可点击“发牌”按钮即可重新发牌,开始下一轮的游戏;如果玩家想结束游戏,则可点击“结束”按钮即可结束游戏。 2.3 开发环境 Microsoft Visual C++ 6.0 3 系统概要设计 3.1 系统功能模块划分 a.建立一个随机产生扑克牌的模块。由程序随机产生4张扑克牌,每张牌对应一个整数。 b.计时的模块。定义一个计时器,以便对使用时间进行计数。 c.计算表达式的模块。主要是通过函数来确定运算式各符号优先级和最终计算出输入算式的结果。 d.验算表达式正误的模块。在规定的时间内输入算式进行验算,根据不同的情况会出现不同的对话框。

数独游戏课程设计报告

数独游戏课程设计报告 将“数独”智力游戏的难度划分与创建问题分解为建立终盘和初盘、难度评分、游戏创建。首先采用行列变换的方法建立终盘,然后隐去部分数字并检验解唯一性,得到初盘。 在已得到初盘的基础上,根据求解时初级方法和高级方法使用的次数确定难度评分,从而依据分数对题目的难度进行划分,以此创建例外等级难度的“数独”游戏。最后通过实验验证了模型的实用性。下面是整理的数独游戏课程设计报告,欢迎来参考! “数独”是18世纪瑞士数学家欧拉发明。该游戏是在9×9的单元网格中进行,这些网格被分9行、9列和3×3个九宫格。单元网格中已有若干数字,其余均为空格。玩家需要推理出所有剩余空格的数字,并满足每一行、每一列、每一个小九宫格内的数字均含1-9且不重复。每一道合格的“数独”谜题都有且仅有唯一答案。 目前,“数独”作为一种智力游戏已经盛行世界,国内外许多学者已对数独的求解算法做了深入研究,例如递归法、回溯候选数法、枚举算法等,但在数独的难度划分与创建方面的研究还很少。由于影响“数独”难度的因素有很多,就问题本身而言,难度因素包括最高难度的技巧、各种技巧所用次数、是否有隐藏及隐藏的深度和广度的技巧组合、当前盘面可逻辑推导出的个数等等;就玩家而言,了解的技巧数量、熟练程度、观察力等也属于难度划分应考虑的因素。因此,单单利用空格数或求解时间对题目难度进行划分是不全面的,其难度指标定义过于主观,讨论也不够细密,无法真正划分难度的级别。 本文首先创建符合要求的“数独”终盘,然后在终盘的基础上生成具有数独特性的初盘,根据求解时初级方法和高级方法使用的次数确定难度评分,从而依据分数对题目的难度进行划分,以此创建例外等级难度的“数独”游戏。 首先运用初等行、列变换,构造一个新的简单明了的终盘生成算法,具体步骤如下: Step1:从行的角度出发,在第一行随机输入1-9的数字。以一个小九宫为单位,将相邻三个数字作为一个集体进行交替,由此获得第二行的数字,再由

17 24点游戏系统设计

中北大学 课程设计说明书 学生姓名:学号: 学生姓名:学号: 学生姓名:学号: 学院:信息与通信工程学院 专业:电子信息工程 题目:多媒体技术和程序设计实践: 24点游戏系统设计 指导教师:陈友兴赵英亮职称:副教授 2011年1月7日

中北大学 课程设计任务书 10/11学年第一学期 学院:信息与通信工程学院 专业:电子信息工程 学生姓名:学号: 学生姓名:学号: 学生姓名:学号: 课程设计题目:多媒体技术和程序设计实践: 24点游戏系统设计 起迄日期:2010年12月18日~2011年1月7日课程设计地点:电子信息工程专业实验室 信息工程系实验室 指导教师:陈友兴赵英亮 系主任:王浩全 下达任务书日期:2010年12月17日

1.设计目的: (1)掌握VC++程序开发平台; (2)掌握对话框模式的可视化实现和按钮消息的响应; (3)掌握应用VC++库函数实现数据的输入、计算等功能。 2.设计内容和要求(包括原始数据、技术参数、条件、设计要求等):(1)查阅相关资料,掌握基于面向对象的编程方法; (2)主界面采用对话框模式,编辑24点游戏的相应控件; (3)实现发牌、计算和验证的功能; (4)要求3位同学各自实现不同分工。 3.设计工作任务及工作量的要求〔包括课程设计计算说明书(论文)、图纸、实物样品等〕: (1)要求设计组的每个成员都要了解设计的要求和思路; (2)编写详细的设计说明书一份; (3)要求有正确的运行结果及结果分析。

4.主要参考文献: 1王华,叶爱亮,祁立学等.Visual C++6.0编程实例与技巧.北京:机械工业出版社,1999. 2李光明.Visual C++6.0经典实例大制作.北京:中国人事出版社,2000. 3严华峰.Visual C++课程设计案例精编.北京:中国水利水电出版社,2002. 4官章全,刘加明.Visual C++6.0类库大全.北京:电子工业出版社,1999. 5张荣梅,梁晓林.Visual C++实用教程.北京:冶金工业出版社,2004. 6魏亮,李春葆.Visual C++程序设计例学与实践.北京:清华大学出版社,2006. 7陈清华,朱红.Visual C++课程设计案例精选与编程指导.南京:东南大学出版社,2004. 5.设计成果形式及要求: 提供详细的设计说明书一份 软件设计结果 6.工作计划及进度: 2010年 12月18日~12月22日:学习VC有关编程方法; 12月23日~2011年1月3日:在指导教师指导下实现程序设计; 2011年1月4日~1月6日:撰写课程设计说明书; 1月7日:答辩 系主任审查意见: 签字: 年月日

课程设计24点小游戏

课程设计报告课程名称:面向对象程序设计C++ 设计题目: 24点小游戏 专业:计算机科学与技术 姓名: 学号: 指导教师:李晓虹 2016 年 1 月 4 日 课程设计报告模块内容要求: (1)系统需求分析:基本简单小游戏通过c++实现 (2)总体设计: 1. 系统自动给出4个数字(1-k,其中J,Q,K按一点算) 2. 由玩家自主计算,当给出数字不能算出24点时,按任意 键继续; 3. 由玩家自行决定是否继续游戏; 4. 在任何情况下都可以按Esc键结束游戏; (3)系统调试: 程序实现代码: 1.主函数: 2.#include "stdio.h" 3.#include "conio.h"

4.#include "stdlib.h" 5.#include "time.h" 6.#include "math.h" 7.#include "string.h" 8./* 9.从一副扑克牌中,任取4张。 10.2-10 按其点数计算(为了表示方便10用T表示),J,Q,K,A 统一按 1 计算 11.要求通过加减乘除四则运算得到数字24。 12.本程序可以随机抽取纸牌,并用试探法求解。 13.*/ 14.v oid GivePuzzle(char* buf) 15.{ 16.int i; 17.char card[] = {'A','2','3','4','5','6','7','8','9','T','J','Q','K'}; 18.for(i=0;i<4;i++) 19.{ 20.buf[i]=card[rand()%13]; 21.} 22.} 23.v oid shuffle(char * buf) 24.{

五子棋游戏__课程设计报告(含源代码可以运行)

《软件基础》大作业 项目名称:五子棋游戏 学号:201046820510 201046820605 姓名:校建林 朱颖 完成时间:2011年11月28日指导教师:鲁可

目录 一需求分析 (1) 1.1开发背景 (1) 1.2项目目标五子棋与游戏开发成员和具体日期完成任务以及任务的具体分配. . . . . . . . . . . . . . . . . . . . 1 1.3运行环境...初始化. (3) 1.4项目任务书主循环控制模块 (3) 1.5玩家下子 (3) 1.6盘面分析填写棋型表 (3) 1.7对方下子 (4) 1.8胜负判断 (4) 二技术线路 (4) 2.1采用的软件及开发平台是什么 2.2项目的总体方案—包括模块及模块间的联系、信息流、数据流等 2.3项目的详细设计—包括模块的功能、数据结构及算法等 2.1技术线路模块图 (4) 2.2技术线路说明 (5) 三工程进度 第三章系统设计 (5) 3.1流程图 (6) 3.2流程图说明 (6) 四程序测试分析 (7) 4.1阶段性测试 4.2总体测试 五个人总结 (9) 附录源代码 (10)

五子棋游戏 第一章需求分析 1.1开发背景 软件需求分析是软件开发周期的第一个阶段,也是关系到软件开发成败的关键一步。对于任何一个软件而言,需求分析工作都是至关重要的一步。只有通过软件需求分析,才能把软件的功能和性能由总体的概念性描述转化为具体的规格说明,进而建立软件开发的基础。实践表明,需求分析工作进行得好坏,在很大程度上决定了软件开发的成败。 软件需求分析的任务是:让用户和开发者共同明确将要开发的是一个什么样的软件。具体而言,就是通过对问题及其环境的理解、分析和综合,建立逻辑模型,完成新软件的逻辑方案设计。 基于本游戏,首先得为整个棋盘建立一张表格用以记录棋子信息,我们使用一个15*15的二维数组Table[15][15](15*15是五子棋棋盘的大小),数组的每一个元素对应棋盘上的一个交叉点,用‘0’表示空位、‘1’代表己方的子、‘2’代表对方的子;这张表也是今后分析的基础。在此之后还要为两个玩家双方各建立一张棋型表Computer[15][15][4]和Player[15][15][4],用来存放棋型数据。 1.2 项目目标五子棋与游戏开发具体任务完成日期以及任务的具体分配 五子棋游戏开发成员:校建林、朱颖。 五子棋游戏开发具体的任务步骤: 1.需求分析 内容包括:总体分析、五子棋与游戏开发成员和具体任务完成日期以及任务的具体分配、初始化、主循环控制模块、玩家下子、盘面分析填写棋型表、对方下子、胜负判断。 2.技术线路 内容包括:采用的软件及开发平台是什么。 项目的总体方案—包括模块及模块间的联系、信息流、数据流等。

扫雷游戏程序设计课程设计报告

课 程 设 计 扫雷游戏程序设计 2013 年 11 月 5 日 设计题目 学 号专业班级 学生姓名 指导教师

合肥工业大学课程设计任务书

一.设计任务 (1)鼠标左击排雷,右击插小旗,打问号; (2)方格里面的数字表示方格周围的雷数; (3)能够显示未标记雷数和游戏用时; (4)雷区上面的小脸可以变化,显示微笑,惊讶,痛苦,胜利。在任何情况下单击小脸可以重新开始游戏; (5)可进行游戏难度的设定:包括预定义的难度级别(雷区行数,列数和雷数),和自行定义雷区行数,列数和雷数的功能; (6)排行榜功能,扫雷成功时候,根据游戏用时更新排行榜。 二. 具体设计 (一)、设计思路 扫雷游戏是很经典也很有趣的一款游戏,这次的游戏程序设计要求设计出功能与原游戏相近的一款游戏,首先定义变量和类要画出游戏方格以及位图,设计游戏等级,等级越高方格越多雷数也越多;然后设置随机布雷以保证每次重新开始游戏都有不同的雷区地图;另外定义鼠标左击扫雷,左击标记周围埋雷情况,右击奇数次排雷偶数次取消上次排雷,以及扫雷第一次左击不能扫到雷。

(二)、设计表示: 1、鼠标左击排雷,右击插小旗,打问号; 2、方格里面的数字表示方格周围的雷数; 3、能够显示未标记雷数和游戏用时; 4、雷区上面的小脸可以变化,显示微笑,惊讶,痛苦,胜利。在任何情况下单击小脸可以重新开始游戏; 5、可进行游戏难度的设定:包括预定义的难度级别(雷区行数,列数和雷数); 6、任何时候开始游戏第一次点击不会扫到雷。 由于时间等原因未完成功能: 排行榜和自行定义雷区行数,列数和雷数功能。 (四)、详细设计 1、添加位图 前十二幅是在雷区的,后四幅是按钮。为了便于加载,必须各自保证其连续性。 分别表示游戏进行的状态、结果胜利或触雷。

c语言课程设计24点

课程设计报告 题目 24点游戏 课程名称软件项目实践(二)院部名称龙蟠学院 专业计算机科学与技术 班级 学生姓名 学号 课程设计地点校内实验室 课程设计学时 2周(40学时) 指导教师沈奇 金陵科技学院教务处制

课程设计报告目录 一、实验目的和要求 (2) 二、实验仪器和设备 (2) 三、实验过程 (2) 四、实验结果与分析 (6) 五、实验心得 (10)

一、实验目的和要求 1.实验目的 1)了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力; 2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方 法和技能; 3)提高综合运用所学的理论知识和方法独立分析和解决问题的能力; 4)训练用系统的观点和软件开发一般规范进行软件开发。 5)培养快速学习新的知识,并在项目中使用的能力。 2.实验要求 设计并实现24点游戏,满足以下基本要求: ①运行系统后,用户登录,输入用户名后,可以进入游戏,或查看英雄榜。 ②玩家开始游戏后,系统随机产生四个1-13的数,分别代表13张牌。提示玩家输入算式。判断玩家输入的表达式是否合法,其中算式中的四个数字只能是程序所给的四个数字。当玩家正确输入算式后,运用“用堆栈求解表达式”的原理,求出结果并判断是否为24,得出用户是输是赢的结果。 ③如果用户赢,计算其所用时间(从输入算式开始计算,直至输入算式结束),并与英雄榜中成绩进行比较。可以进入英雄榜的,则需更新英雄榜。英雄榜只按成绩降序记录1-5名相关信息。 二、实验仪器和设备 Microsoft WindowsXP / Windows 7Turbo C/Visual C++ 三、实验过程 一.需求分析 1.1 需求概述分析 本系统共分为四个模块:普通用户登录模块,用户模块,游戏模块和更改用户模块以下是各个模块的功能简介。 (1)普通用户登录模块 检测用户名是否存在,检查密码是否正确; (2)用户模块 选择用户需要执行的操作(进入游戏、查看英雄榜、切换用户、退出)。(3)游戏模块 用户进行游戏,计算用户游戏时间,更新英雄榜。 (4)更改用户模块 提供对用户的更改功能。

数据结构24点游戏源代码

#include #include #include #include #define OPSETSIZE 7 #define STACK_INIF_SIZE 50 #define STACKINCREMENT 10 int number[2][4]; enum { eNumber = 0, //操作数 eOperator = 1 //算子 }; int oper[7]={43,45,42,47,40,41,35}; char OPSET[OPSETSIZE]={'+' , '-' , '*' , '/' ,'(' , ')' , '#'}; typedef struct sqlist{ int bol;//bol 是0 时,num-ch是一个数字;bol 是1 时num_ch 运算符int num_ch; struct sqlist *next; }sqlist;//线性表 typedef struct sqstack{ int *base; int *top; int stacksize; }sqstack;//栈的定义 unsigned char Prior[7][7] = {// 课本表3.1 算符间的优先关系 '>','>','<','<','<','>','>', '>','>','<','<','<','>','>', '>','>','>','>','<','>','>', '>','>','>','>','<','>','>', '<','<','<','<','<','=',' ', '>','>','>','>',' ','>','>', '<','<','<','<','<',' ','=' }; int init_sq(sqlist *l){//初始化链表 l=(sqlist*)malloc(sizeof(sqlist)); if(l==NULL){ exit(-2);

24点游戏程序设计说明书

**大学课程设计说明书 学生姓名:学号: 学院:信息与通信工程学院 题目:24 点游戏程序设计 指导教师: 职称 : 2015年1 月19 日

**大学 课程设计任务书 14/15学年第一学期 学院:信息与通信工程学院 专业:电子信息科学与技术 学生姓名: 学号: 题目:24点游戏程序设计 起迄日期:2015年 1 月 12日~2015年 01 月 23 日课程设计地点: 指导教师: 学科部主任:

下达任务书日期:2015年1月12日 课程设计任务书 1.设计目的: 通过设计,明确 24 点游戏的设计思想和设计过程,扎实掌握 VC、C++或 C 语言编程的整体框架和步骤,使学生具有一定综合分析问题和解决问题的能力。 2.设计内容和要求(包括原始数据、技术参数、条件、设计要求等): 功能说明: 具有 24 点游戏的各项功能。 设计要求: 课程设计的目的在于培养学生的综合素质,要求学生做到: (1)根据题目要求查阅有关资料,确定方案,写出设计方案; (2)根据对选题的理解,消化查阅资料,给出相关设计的流程图; (3)在 C语言、 C++或 VC环境下,实现各项功能; (4)对结果进行分析总结。 3.设计工作任务及工作量的要求〔包括课程设计计算说明书(论文)、图纸、实物样品等〕: 设计工作任务: (1)了解课题背景,掌握基本技术,制定程序设计框架。 (2)完成设计内容:包括程序流程图和完成实现功能的程序代码,写出设计说明书。 (3)设计答辩。 工作量的要求: (1)通过查阅资料了解与 24 点游戏程序设计相关的基本理论、原理以及背景知识, 理解选题意义; (2)掌握与 24 点游戏程序相关的设计思想、原理、设计框架和步骤; (3)完成 24 点游戏程序的功能和程序代码的实现; (4)通过实验验证程序代码的可行性; (5)给出设计总结。

弹珠小游戏课程设计实验报告

摘要: 这个小程序是关于弹珠的小游戏,游戏比较简单,以小球的速度来区分游戏的难易。该小程序是用左右键控制游戏的开始和挡板的方向,不让小球落到底端,当然,小球的速度越快,该游戏的难度也就越大。此程序利用C#程序编写,在visual studio 2005的环境下进行调试运行的。弹珠原理:碰撞基本都是参照“反射定理”的,就是出射角=入射角,但是做碰撞时需要角度。碰撞的运动和球的方向有关,球的方向有好几种。有8向的,也有4向的。保证小球横向上在允许范围之内运动,当触发时就反方向运动,和当出了球拍的可击打范围就停止运行了。 对于该程序开发,必须达到以下要求: 1、熟悉.NET开发环境,能够使用C#语言在.NET平台上独立设计、开发WINDOWS应用程序。 2、掌握C#语言的异常处理技术,能够使用.NET各种调试方法调试代码,掌握帮助的使用方法。 3、掌握常用控件以及控件的常用属性的使用方法。 4、界面要做到简洁易懂,具有人性化等特点。 5、程序没有在使用过程中不存在任何的问题。 6、可选功能应全面,可以实施速度的选择,游戏的是否继续,还有记录的保存。 目录 摘要: (1) 目录 (1) 一、题目说明 (2)

二、总体设计 (2) 2.1.系统开发平台 (2) 三、详细说明 (2) 3.1系统实施 (3) 四、遇到的问题和解决方法 (28) 五、课程设计总结 (30) 六、参考文献 (30) 附录(源程序代码) (30) 一、题目说明 当今用简单的代码编写的小游戏越来越受人们的欢迎,所以对于小游戏的开发也成为了各大编程人士的最爱。我选择弹珠游戏这个课题,用代码控制游戏的等级,运用不同的函数来控制球的速度和方向,游戏简单而有趣。 二、总体设计 2.1.系统开发平台 系统采用Microsoft Visual Studio 2005 三、详细说明 在此弹球游戏中,对于球与挡板的位置,借助于x与y坐标的调整来实现统计,从而确定球落

数据结构课程设计-24点游戏

设计任务书

注意: 1.任务书格式参照“任务书范例”执行。 2.范例中的红色 ..文字应根据你所选择的具体课题,修改为对应的内容。 范例中的其它内容不变。 【摘要】 80 年代全世界流行一种数字游戏,在中国我们把这种游戏称为“24 点”。用给出4个数,实现24 点,就是从数中中任意抽出四张(数字表示为1-13),用加、减、乘、除的方法使结果成为24。程序要实现由系统随机产生四个数,玩家输入表达式,然后判断表达式是否合法且等于24。如果玩家认为这四张牌算不出24 点(如:1,1,1,1),可只输入?,程序将判断这四张牌是否能得出24 点,如果能,则程序将给出算式,如果不能则做出说明。 【关键词】 24点,随机产生数,分数记录

目录 1需求分析 (5) 1.1 程序的功能 (5) 1.2 输入输出要求…….........………………………………………………… 5 2概要设计.......……………………………………………………….. 5 2.1模块分析........……………………………………………………….. 5 2.2程序设计组成框图 (6) 2.3根据对 24 点游戏的模块分析..…………………………………………… 6 2.4游戏算法整个流程图 (6) 3详细设计和实现 (7) 4调试与操作说明…….........……………………………………………….. 20 总结…….........…………………………………………………….. 26 致谢…….........…………………………………………………….. 27 参考文

献 (28) 1.需求分析 1.1程序的功能 程序运行后产生 4 个数,其中每个数字只能使用一次;任意使用 + - * / ( ) ,构造出一个表达式,使得最终结果为 24,这就是常见的算 24 点的游戏。在输入表达式时程序会自动检测用户输入的数据是否为程序产生的那4个整数,如果不是就提醒用户输入有误,重新输入或退出程序。有的时候程序随机产生的扑克牌对应的整数可能不能算成 24,如产生了 4个1,这个时候用户只要点击无解程序就会自动退出了。 1.2输入输出的要求 输入的运算符只能是+、-、*、/、)这六个,输入的整数必须是程序随机(、产生的那四个数,而且每个数只能用一次。当用户正确输入算式后,用“堆栈来求表达式的值” 的原理,求出结果并判断是否为 24,得出用户是输是赢的结果。输出结果后,询问用户是否继续,是则重新启动程序,否则结束程序。 2.概要设计 2.1 模块分析 24 算法游戏的功能模块不多,也比较容易实现。基本思想就是由程序 先随机产生 4 张扑克牌,每张扑克牌对应一个整数,所以首先要有一个

24点游戏实验报告

课程设计报告 题 目 24 点游戏 课 程 名 称 软件项目实践(二) 院 部 名 称 信息技术学院 专 业 计算机科学与技术 班 级 M10计算机科学与技术(专转本) 学 生 姓 名 张 伟 学 号 1021413036 课程设计地点 校内实验室 课程设计学时 2周(40学时) 指 导 教 师 沈 奇 金陵科技学院教务处制

一、实验目的和要求 1.实验目的 1)了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力; 2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方 法和技能; 3)提高综合运用所学的理论知识和方法独立分析和解决问题的能力; 4)训练用系统的观点和软件开发一般规范进行软件开发。 5)培养快速学习新的知识,并在项目中使用的能力。 2.实验要求 设计并实现24点游戏,满足以下基本要求: ①运行系统后,出现登录/注册初始界面,允许用户选择“注册”、“登录”或“退出”。用户分为2类:管理员、一般用户,他们拥有不用权限。管理员可以对用户信息实现增、删、改、查等管理操作;一般用户可以进入游戏,以及查看英雄榜。 ②玩家开始游戏后,系统随机产生四个1-13的数,分别代表13张牌。提示玩家输入算式。判断玩家输入的表达式是否合法,其中算式中的四个数字只能是程序所给的四个数字。当玩家正确输入算式后,运用“用堆栈求解表达式”的原理,求出结果并判断是否为24,得出用户是输是赢的结果。 ③如果用户赢,计算其所用时间(从输入算式开始计算,直至输入算式结束),并与英雄榜中成绩进行比较。可以进入英雄榜的,则需更新英雄榜。英雄榜只按成绩降序记录1-5名相关信息。 二、实验仪器和设备 Microsoft WindowsXP / Windows 7Turbo C/Visual C++ 三、实验过程

相关主题
文本预览
相关文档 最新文档