骑士飞行棋实训报告.docx
- 文档编号:5605373
- 上传时间:2022-12-28
- 格式:DOCX
- 页数:18
- 大小:43.59KB
骑士飞行棋实训报告.docx
《骑士飞行棋实训报告.docx》由会员分享,可在线阅读,更多相关《骑士飞行棋实训报告.docx(18页珍藏版)》请在冰豆网上搜索。
骑士飞行棋实训报告
山东理工大学计算机学院
实训报告
《DOS界面开发基础实训》
班级
姓名
学号
指导教师
二○一二年七月五日
实训任务书及成绩评定
课题名称
骑士飞行棋
Ⅰ、题目的目的和要求:
1、设计目的
本实训是实践性教学环节之一,旨在锻炼学生的实践操作能力和综合应用能力,希望通过案例实践,帮助学生掌握DOS界面的开发和应用,具备熟练使用C语言开发界面、感受游戏开发过程等。
2.要求学生掌握:
(1)、C语言的规范、结构和标记。
(2)、数组、链表的定义和使用。
(3)、C语言的程序设计基础、面向对象编程、操作、事件处理和特效,感受游戏的开发过程等
(4)、综合应用各种前台技术开发DOS页面。
2、设计题目要求:
第一部分
游戏端首页
(1)角色的分配及及游戏规则:
游戏规则和传统的飞行棋一样,支持两人对战
采用100格小型游戏棋盘
游戏规则:
对战双方轮流掷骰子控制自己的骑兵前进或后退,在游戏棋盘上设置有关卡
普通
地雷
暂停
时空隧道
幸运轮盘(提供两种运气:
交换位置和轰炸)
棋盘上的关卡只在骑兵第一次移动遇到时有效
(2)棋盘示例:
第二部分:
游戏过程
(1)地图显示思路:
将对战地图划分成4个部分分别显示
奇数行:
顺序输出地图数组中代号对应图像
右竖行:
先输出空格,再输出数组中代号对应图像
偶数行:
逆序输出地图数组中代号对应图像
(2)游戏进行中的界面
第三部分:
游戏结束,玩家胜负已分
Ⅱ、设计进度及完成情况
日期
内容
7.1
分析所给题目,初步划分侧重点,并初步制定流程
7.2
对所给题目进行详细的研究并细读有关资料
7.3
做出所给题目,讨论研究并调试检查错误,
7.4
对所给题目进行综合考虑,并进行再次修改
7.5
答辩,思考老师的评价
Ⅲ、系统实现--主要功能代码
voidWelcome()
{
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("////\n");
printf("////\n");
printf("//骑士飞行棋//\n");
printf("////\n");
printf("////\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("\n\n\n\n");
printf("≈≈≈≈≈≈≈≈≈≈≈≈两人对战≈≈≈≈≈≈≈≈≈≈≈≈≈≈\n\n");
printf("请选择角色:
1.曹操2.孙权3.刘备\n");
printf("请玩家1选择角色:
");//玩家1选择角色
scanf("%d",&name1);
printf("\n请玩家2选择角色:
");//玩家2选择角色
scanf("%d",&name2);
system("cls");//清屏
}
//打印规则
voidRule()
{
printf("≈≈≈≈≈≈≈≈≈≈≈游戏规则≈≈≈≈≈≈≈≈≈≈≈≈\n\n");
printf("1.两个玩家轮流掷骰子,如果上轮走到暂停关卡,停掷一次\n\n");
printf("2.若玩家走到幸运轮盘,则和对方交换位置或者对方后退6步\n\n");
printf("3.若玩家走到某格,而对方也在此格,则对方退回原点\n\n");
printf("4.若遇到地雷后退6步\n\n");
printf("5.若遇到暂停则此玩家下一回合停止掷骰子\n\n");
printf("6.若遇到时空隧道再前进10步\n\n");
printf("7.∷:
普通■:
暂停★:
地雷¤:
幸运转盘〓:
时空隧道\n");
printf("\n8.玩家1:
①玩家2:
②\n");
printf("按按任意键继续:
\n");//按任意键继续
getch();
system("cls");
}
voidmapp()
{
Random();
inti,k;
//标记为空格
for(k=2;k<31;k++)
{
map[0][k]=5;
}
for(i=2;i<5;i++)
{
for(k=0;k<30;k++)
{map[i][k]=5;
}
}
for(i=6;i<9;i++)
{
for(k=1;k<31;k++)
map[i][k]=5;
}
map1();//打印地图
}
//打印地图
voidmap1()
{
inti,k;
//开始打印
for(i=0;i<10;i++)
{
for(k=0;k<31;k++)
{
if(map[i][k]==0)
{
printf("∷");
}
elseif(map[i][k]==1)
{
printf("¤");
}
elseif(map[i][k]==2)
{
printf("★");
}
elseif(map[i][k]==3)
{
printf("■");
}
elseif(map[i][k]==4)
{
printf("〓");
}
elseif(map[i][k]==6)
{
printf("①");
}
elseif(map[i][k]==7)
{
printf("②");
}
elseprintf("");
}
printf("\n");
}
}
voidRandom()
{
intk=0,i=0;
inta[5];
srand(time(NULL));//将系统当前时间设置为随机数种子
intNum;
ints1,s2;
while
(1)
{
Num=rand()%10;//产生小于10的随机数
if(Num<10&&Num>3)
{
a[i]=Num;
i++;
}
if(i==4)
break;
}
for(i=1;i<5;i++)
{
k=0;
while
(1)
{
s1=rand()%30;//产生小于30的随机数
s2=rand()%10;//产生小于10的随机数
//
if((s1>0&&s1<31&&(s2==1||s2==5||s2==9))||
(s1==30&&s2>1&&s2<6)||(s1==0&&s2>6&&s2<10))
{
map[s2][s1]=i;
k++;
}
if(k>a[i-1])
{
printf("\n");
break;
}
}
}
}
intRandomm()
{
intNum;
srand(time(NULL));//将系统当前时间设置为随机数种子
while
(1)
{
Num=rand()%10;
if(Num>0&&Num<7)
{
break;
}
}
returnNum;
}
voidcopyy1()
{
inti,k;
ints=1;
for(i=1,k=0;k<31;k++)
{
step[s]=map[i][k];
s++;
}
for(i=30,k=2;k<5;k++)
{
step[s]=map[k][i];
s++;
}
for(i=5,k=30;k>-1;k--)
{
step[s]=map[i][k];
s++;
}
for(i=0,k=6;k<9;k++)
{
step[s]=map[k][i];
s++;
}
for(i=9,k=0;k<31;k++)
{
step[s]=map[i][k];
s++;
}
}
voidProcess()
{
intw;
while(step1<99&&step2<99){//任意一个人走到终点,跳出循
//玩家1掷骰子
if(n1&&na1){
n1=0;
n2=1;
if(na2==0)
{
n2=0;
na2=1;
n1=1;
}
printf("玩家1掷骰子,按任意键:
");
getch();
w=Randomm();
printf("玩家1走的步数:
%d\n",w);
getch();
if((step1+w)>=99){
system("cls");
end
(1);//退出
break;
}
Mobile(6,w,0);
//system("cls");
copypp2();
map1();
}
//玩家2掷骰子
if(n2&&na2){
n2=0;
n1=1;
if(na1==0)
{
n1=0;
na1=1;
n2=1;
}
printf("玩家2掷骰子,按任意键:
");
getch();
w=Randomm();//掷骰子获得移动的步数
printf("玩家2走的步数:
%d\n",w);
getch();
if((step2+w)>=99){
system("cls");
end
(2);
break;
}
//移动
Mobile(7,w,0);
//system("cls");
copypp2();
map1();
}
}
}
voidMobile(intnam,intst,intww)
{
if(nam==6)
{
step[step1]=0;
step1+=st;
if(step1<0)
{
step1=0;
}
Judgment(nam,step1,ww);
}
else{
step[step2]=0;
step2+=st;
if(step2<0)
{
step2=0;
}
Judgment(nam,step2,ww);
}
}
voidJudgment(intnam,intst,intww)
{
inti;
i=step[st];
switch(i){
case-1:
break;
case0:
step[st]=nam;//普通格
break;
case1:
if(Randomm()<3)//幸运轮盘
{
step[step1]=7;//和对方交换位置--做交换
step[step2]=6;
}
else{//轰炸对方--对方退6步
step[st]=nam;
if(nam==6)
{
Mobile(7,-6,1);
}
elseMobile(6,-6,1);
break;
}
case2:
step[st]=nam;
if(nam==6)
{
Mobile(7,-6,1);
}
elseMobile(6,-6,1);
break;//地雷
//退后6步
case3:
step[st]=nam;//暂停键
if(nam==6)
{
na1=0;
if(ww==1)
{
na1=1;
n2=1;
}
}
else{
na2=0;
if(ww==1)
{
na2=1;
n1=1;
}
}//设置状态变量为暂停,标识下轮暂停
break;
case4:
step[st]=nam;
if(nam==6)
{
Mobile(6,10,1);
}
elseMobile(7,10,1);
break;//时空隧道
//再前进10步
case6:
step[st]=nam;
step1=0;break;
case7:
step[st]=nam;
step2=0;break;
}
}
voidcopypp2()
{
inti,k;
ints=1;
for(i=1,k=0;k<31;k++)
{
map[i][k]=step[s];
s++;
}
for(i=30,k=2;k<5;k++)
{
map[k][i]=step[s];
s++;
}
for(i=5,k=30;k>-1;k--)
{
map[i][k]=step[s];
s++;
}
for(i=0,k=6;k<9;k++)
{
map[k][i]=step[s];
s++;
}
for(i=9,k=0;k<31;k++)
{
map[i][k]=step[s];
s++;
}
}
IV、实训感悟
通过对此项目的开发,我更加了解关于DOS界面的开发流程,也使我在实践当中不断完善自己的知识系统,是自己充分的了解了理论知识。
在此由衷的感谢指导教师张立红老师。
V、主要参考文献及资料
[1]张海潘.软件工程导论[M].北京:
清华大学出版社,1998.
[2]王为青,刘变红C语言高级编程及实例剖析人民民邮电出版社2007-3-1
VI、成绩评定:
设计成绩:
(教师填写)
指导老师:
(签字)
二○一二年七月五日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 骑士 飞行 棋实训 报告