C语言程序设计综合实验
设计报告
题目:
班级;
人数:
小组成员:
时间:
1 课程设计报告
1.1课题描述
1.2需求分析
1.3概要设计
2源程序代码
3详细设计
1.课题设计报告
1.1课题分析:
游戏介绍:在一个18*18的方格中下棋,两个玩家,根据键盘上的上、下、左、右键及W、S、A、D来控制棋的走向,空格键及回车键表示确定棋子的落下位置,两个玩家为交替下棋,如果于其中任何一家下的五个棋子能够练成一线那么为胜者,游戏结束。
1 、五子棋是两个人之间进行的竞技活动,开始是由P1先下,把棋落在方框内,然后P2下,如此下棋直到一方在棋盘的横,竖 ,斜将同的五个棋子连成一条线,则此方获胜。游戏由玩家决定继续或结束。
1.2需求分析
(1)在游戏开始时出现一个欢迎的界面同时介绍了游戏的规则;
(2)画出棋盘的大小;
(3)画棋子并确定棋子的大小;
(4)判断键盘输入哪个键执行操作;
(5)玩家P1先落棋;
(6)玩家轮流下棋;
(7)判断赢家。
(8)由玩家决定是否继续新游戏。
1.3 概要设计
(1)功能模块
2. 主流程图
遇到的一个问题:
图形一闪而过解决方法
因为Win-TC的图形驱动程序EGAVGA.BGI文件安装路径为c:\\Win-TC\\projects
int gdriver=DETECT, gmode;
initgraph(&gdriver, &gmode, "c:\\tc")改为initgraph(&gdriver, &gmode, "c:\\Win-TC\\projects")
2程序代码
#include <bios.h>
#include "stdio.h"
#include "graphics.h"
/*定义1号玩家的操作键键码*/
#define W 0x1177/*上移--'W'*/
#define S 0x1f73/*下移--'S'*/
#define A 0x1e61/*左移--'A'*/
#define D 0x2064/*右移--'D'*/
#define SP 0x3920/*落子--空格键*/
/*定义2号玩家的操作键键码*/
#define UP 0x4800/*上移--方向键up*/
#define DOWN 0x5000/*下移--方向键down*/
#define LEFT 0x4b00/*左移--方向键left*/
#define RIGHT 0x4d00/*右移--方向键right*/
#define ENTER 0x1c0d/*落子--回车键Enter*/
#define ESC 0x011b
#define X (getx()-140)/20 /*将棋盘上光标所在点的横坐标X转化为0-18的数*/
#define Y (gety()-70)/20 /*将棋盘上光标所在点的横坐标Y转化为0-18的数*/
c++课程设计报告int k,w=DETECT,gmode,j,i;
int a[20][20];
void p1move(); /*定义函数*/
void p2move();
void win();
p1win();
p2win();
yellow();
white();
black();
heqi();
welcome();
help();
csz();
qipang();
p1turn();
p2turn();
p1del();
p1turn()/*画左上角的白棋*/
{
setcolor(7);
setfillstyle(1,7);
circle(60,110,9);
floodfill(60,110,7);
}
p1del() /*将左上角白棋檫去*/
{
setfillstyle(1,14);
floodfill(60,110,14);
}
p2turn() /*画右上角的黑棋*/
{
setcolor(0);
setfillstyle(1,0);
circle(578,115,9);
floodfill(578,115,0);
}
p2del() /*画右上角的黑棋*/
{
setfillstyle(1,14);
floodfill(578,115,14);
}
white() /*在当前位置画白棋*/
{
setcolor(7);
setfillstyle(1,7);
circle(getx(),gety(),9);
floodfill(getx(),gety(),7);
}
black() /*在当前位置画黑棋*/
{
setcolor(0);
setfillstyle(1,0);
circle(getx(),gety(),9);
floodfill(getx(),gety(),0);
}
yellow() /*补棋盘的颜*/
{
setcolor(6);
setfillstyle(1,6);
circle(getx(),gety(),9);
floodfill(getx(),gety(),6);
setcolor(15);
line(getx()-9,gety(),getx()+9,gety());
line(getx(),gety()+9,getx(),gety()-9);
}
qipang() /*画棋盘*/
{ setfillstyle(1,6);
bar(120,50,520,450);
setfillstyle(1,14);
bar(540,50,620,150);
bar(20,50,100,150);
for(k=0;k<19;k++)
{moveto(140+20*k,70);linerel(0,360);
moveto(140,70+20*k);linerel(360,0);
}
moveto(240,170);
setcolor(5);
settextstyle(3,0,4);
outtextxy(50,60,"P1");
outtextxy(560,60,"P2");
}
welcome() /*欢迎界面*/
{ initgraph(&w ,&gmode,"c:\\Win-TC\\projects") ;
clearviewport();
setcolor(4);
settextstyle(0,0,6);
outtextxy(180,180,"Welcome");
settextstyle(0,0,2);
outtextxy(280,440,"press any key to begin");
delay(1000) ; /*delay(1000000000) ; delay(1000000000) ; */
}
help() /*帮助界面*/
{
initgraph(&w ,&gmode,"c:\\Win-TC\\projects");
clearviewport();
setcolor(4);
settextstyle(0,0,2);
outtextxy(80,100,"P1 move; 'W S A D' ");
outtextxy(80,120," set : space ");
outtextxy(80,180,"P2 move: up down left right ");
outtextxy(80,200," set: Enter");
outtextxy(80,280,"Whoever is first to gather five ");/*same color pieces in a line without any different color piece among them,then he win */
outtextxy(80,300,"same color pieces in a line without");
outtextxy(80,320,"any different color piece among ");
outtextxy(80,340,"them, then he win.");
outtextxy(80,360,"When you want to quit the game,");
outtextxy(80,380,"press Esc.");
outtextxy(220,440,"press any key to continue");
while(bioskey(1)==0);
}
p1win() /*玩家1获胜界面*/
{
initgraph(&w ,&gmode,"c:\\Win-TC\\projects") ;
clearviewport();
setcolor(4);
settextstyle(0,0,6);
outtextxy(180,180,"P1 WIN");
settextstyle(0,0,2);
outtextxy(280,440,"press any key to begin");
while(bioskey(1)==0);
main();
}
p2win() /*玩家2获胜界面*/
{
clearviewport();
setcolor(4);
settextstyle(0,0,6);
outtextxy(180,180,"P2 WIN");
settextstyle(0,0,2);
outtextxy(280,440,"press any key to begin");
while(bioskey(0)!=0) main();
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论