c语言初始化棋盘函数 c语言象棋棋盘

求一个用C语言编写的小游戏代码#include graphics.h
#include conio.h
#include time.h
/////////////////////////////////////////////
// 定义常量、枚举量、结构体、全局变量
/////////////////////////////////////////////
#define WIDTH 10// 游戏区宽度
#define HEIGHT 22// 游戏区高度
#define SIZE 20// 每个游戏区单位c语言初始化棋盘函数的实际像素
// 定义操作类型
enum CMD
{
CMD_ROTATE,// 方块旋转
CMD_LEFT, CMD_RIGHT, CMD_DOWN, // 方块左、右、下移动
CMD_SINK,// 方块沉底
CMD_QUIT// 退出游戏
};
// 定义绘制方块的方法
enum DRAW
{
SHOW, // 显示方块
HIDE, // 隐藏方块
FIX// 固定方块
};
// 定义七种俄罗斯方块
struct BLOCK
{
WORD dir[4]; // 方块的四个旋转状态
COLORREF color; // 方块的颜色
} g_Blocks[7] = { {0x0F00, 0x4444, 0x0F00, 0x4444, RED},// I
{0x0660, 0x0660, 0x0660, 0x0660, BLUE},// 口
{0x4460, 0x02E0, 0x0622, 0x0740, MAGENTA}, // L
{0x2260, 0x0E20, 0x0644, 0x0470, YELLOW}, // 反L
{0x0C60, 0x2640, 0x0C60, 0x2640, CYAN},// Z
{0x0360, 0x4620, 0x0360, 0x4620, GREEN}, // 反Z
{0x4E00, 0x4C40, 0x0E40, 0x4640, BROWN}}; // T
// 定义当前方块、下一个方块的信息
struct BLOCKINFO
{
byte id; // 方块 ID
char x, y; // 方块在游戏区中的坐标
byte dir:2; // 方向
} g_CurBlock, g_NextBlock;
// 定义游戏区
BYTE g_World[WIDTH][HEIGHT] = {0};
/////////////////////////////////////////////
// 函数声明
/////////////////////////////////////////////
void Init();// 初始化游戏
void Quit();// 退出游戏
void NewGame();// 开始新游戏
void GameOver();// 结束游戏
CMDGetCmd();// 获取控制命令
void DispatchCmd(CMD _cmd);// 分发控制命令
void NewBlock();// 生成新的方块
bool CheckBlock(BLOCKINFO _block);// 检测指定方块是否可以放下
void DrawBlock(BLOCKINFO _block, DRAW _draw = SHOW); // 画方块
void OnRotate();// 旋转方块
void OnLeft();// 左移方块
void OnRight();// 右移方块
void OnDown();// 下移方块
void OnSink();// 沉底方块
/////////////////////////////////////////////
// 函数定义
/////////////////////////////////////////////
// 主函数
void main()
{
Init();
CMD c;
while(true)
{
c = GetCmd();
DispatchCmd(c);
// 按退出时,显示对话框咨询用户是否退出
if (c == CMD_QUIT)
{
HWND wnd = GetHWnd();
if (MessageBox(wnd, _T("您要退出游戏吗c语言初始化棋盘函数?"), _T("提醒"), MB_OKCANCEL | MB_ICONQUESTION) == IDOK)
Quit();
}
}
}
// 初始化游戏
void Init()
{
initgraph(640, 480);
srand((unsigned)time(NULL));
// 显示操作说明
setfont(14, 0, _T("宋体"));
outtextxy(20, 330, _T("操作说明"));
outtextxy(20, 350, _T("上c语言初始化棋盘函数:旋转"));
outtextxy(20, 370, _T("左:左移"));
outtextxy(20, 390, _T("右:右移"));
outtextxy(20, 410, _T("下:下移"));
outtextxy(20, 430, _T("空格:沉底"));
outtextxy(20, 450, _T("ESC:退出"));
// 设置坐标原点
setorigin(220, 20);
// 绘制游戏区边界
rectangle(-1, -1, WIDTH * SIZE, HEIGHT * SIZE);
rectangle((WIDTH1) * SIZE - 1, -1, (WIDTH5) * SIZE, 4 * SIZE);
// 开始新游戏
NewGame();
}
// 退出游戏
void Quit()
{
closegraph();
exit(0);
}
// 开始新游戏
void NewGame()
{
// 清空游戏区
setfillstyle(BLACK);
bar(0, 0, WIDTH * SIZE - 1, HEIGHT * SIZE - 1);
ZeroMemory(g_World, WIDTH * HEIGHT);
// 生成下一个方块
g_NextBlock.id = rand() % 7;
g_NextBlock.dir = rand() % 4;
g_NextBlock.x = WIDTH1;
g_NextBlock.y = HEIGHT - 1;
// 获取新方块
NewBlock();
}
// 结束游戏
void GameOver()
{
HWND wnd = GetHWnd();
if (MessageBox(wnd, _T("游戏结束 。\n您想重新来一局吗?"), _T("游戏结束"), MB_YESNO | MB_ICONQUESTION) == IDYES)
NewGame();
else
Quit();
}
// 获取控制命令
DWORD m_oldtime;
CMD GetCmd()
{
// 获取控制值
while(true)
{
// 如果超时,自动下落一格
DWORD newtime = GetTickCount();
if (newtime - m_oldtime = 500)
{
m_oldtime = newtime;
return CMD_DOWN;
}
// 如果有按键,返回按键对应的功能
if (kbhit())
{
switch(getch())
{
case 'w':
case 'W': return CMD_ROTATE;
case 'a':
case 'A': return CMD_LEFT;
case 'd':
case 'D': return CMD_RIGHT;
case 's':
case 'S': return CMD_DOWN;
case 27: return CMD_QUIT;
case ' ': return CMD_SINK;
case 0:
case 0xE0:
switch(getch())
{
case 72: return CMD_ROTATE;
case 75: return CMD_LEFT;
case 77: return CMD_RIGHT;
case 80: return CMD_DOWN;
}
}
}
// 延时 (降低 CPU 占用率)
Sleep(20);
}
}
// 分发控制命令
void DispatchCmd(CMD _cmd)
{
switch(_cmd)
{
case CMD_ROTATE: OnRotate();break;
case CMD_LEFT:OnLeft();break;
case CMD_RIGHT:OnRight();break;
case CMD_DOWN:OnDown();break;
case CMD_SINK:OnSink();break;
case CMD_QUIT:break;
}
}
// 生成新的方块
void NewBlock()
{
g_CurBlock.id = g_NextBlock.id,g_NextBlock.id = rand() % 7;
g_CurBlock.dir = g_NextBlock.dir, g_NextBlock.dir = rand() % 4;
g_CurBlock.x = (WIDTH - 4) / 2;
g_CurBlock.y = HEIGHT2;
// 下移新方块直到有局部显示
WORD c = g_Blocks[g_CurBlock.id].dir[g_CurBlock.dir];
while((c0xF) == 0)
{
g_CurBlock.y--;
c = 4;
}
// 绘制新方块
DrawBlock(g_CurBlock);
// 绘制下一个方块
setfillstyle(BLACK);
bar((WIDTH1) * SIZE, 0, (WIDTH5) * SIZE - 1, 4 * SIZE - 1);
DrawBlock(g_NextBlock);
// 设置计时器,用于判断自动下落
m_oldtime = GetTickCount();
}
// 画方块
void DrawBlock(BLOCKINFO _block, DRAW _draw)
{
WORD b = g_Blocks[_block.id].dir[_block.dir];
int x, y;
int color = BLACK;
【c语言初始化棋盘函数 c语言象棋棋盘】 switch(_draw)
{
case SHOW: color = g_Blocks[_block.id].color; break;
case HIDE: color = BLACK; break;
case FIX: color = g_Blocks[_block.id].color / 3; break;
}
setfillstyle(color);
for(int i=0; i16; i)
{
if (b0x8000)
{
x = _block.xi % 4;
y = _block.y - i / 4;
if (yHEIGHT)
{
if (_draw != HIDE)
bar3d(x * SIZE2, (HEIGHT - y - 1) * SIZE2, (x1) * SIZE - 4, (HEIGHT - y) * SIZE - 4, 3, true);
else
bar(x * SIZE, (HEIGHT - y - 1) * SIZE, (x1) * SIZE - 1, (HEIGHT - y) * SIZE - 1);
}
}
b = 1;
}
}
// 检测指定方块是否可以放下
bool CheckBlock(BLOCKINFO _block)
{
WORD b = g_Blocks[_block.id].dir[_block.dir];
int x, y;
for(int i=0; i16; i)
{
if (b0x8000)
{
x = _block.xi % 4;
y = _block.y - i / 4;
if ((x0) || (x = WIDTH) || (y0))
return false;
if ((yHEIGHT)(g_World[x][y]))
return false;
}
b = 1;
}
return true;
}
// 旋转方块
void OnRotate()
{
// 获取可以旋转的 x 偏移量
int dx;
BLOCKINFO tmp = g_CurBlock;
tmp.dir;if (CheckBlock(tmp)) { dx = 0;goto rotate; }
tmp.x = g_CurBlock.x - 1; if (CheckBlock(tmp)) { dx = -1; goto rotate; }
tmp.x = g_CurBlock.x1; if (CheckBlock(tmp)) { dx = 1;goto rotate; }
tmp.x = g_CurBlock.x - 2; if (CheckBlock(tmp)) { dx = -2; goto rotate; }
tmp.x = g_CurBlock.x2; if (CheckBlock(tmp)) { dx = 2;goto rotate; }
return;
rotate:
// 旋转
DrawBlock(g_CurBlock, HIDE);
g_CurBlock.dir;
g_CurBlock.x= dx;
DrawBlock(g_CurBlock);
}
// 左移方块
void OnLeft()
{
BLOCKINFO tmp = g_CurBlock;
tmp.x--;
if (CheckBlock(tmp))
{
DrawBlock(g_CurBlock, HIDE);
g_CurBlock.x--;
DrawBlock(g_CurBlock);
}
}
// 右移方块
void OnRight()
{
BLOCKINFO tmp = g_CurBlock;
tmp.x;
if (CheckBlock(tmp))
{
DrawBlock(g_CurBlock, HIDE);
g_CurBlock.x;
DrawBlock(g_CurBlock);
}
}
// 下移方块
void OnDown()
{
BLOCKINFO tmp = g_CurBlock;
tmp.y--;
if (CheckBlock(tmp))
{
DrawBlock(g_CurBlock, HIDE);
g_CurBlock.y--;
DrawBlock(g_CurBlock);
}
else
OnSink(); // 不可下移时,执行“沉底方块”操作
}
// 沉底方块
void OnSink()
{
int i, x, y;
// 连续下移方块
DrawBlock(g_CurBlock, HIDE);
BLOCKINFO tmp = g_CurBlock;
tmp.y--;
while (CheckBlock(tmp))
{
g_CurBlock.y--;
tmp.y--;
}
DrawBlock(g_CurBlock, FIX);
// 固定方块在游戏区
WORD b = g_Blocks[g_CurBlock.id].dir[g_CurBlock.dir];
for(i = 0; i16; i)
{
if (b0x8000)
{
if (g_CurBlock.y - i / 4 = HEIGHT)
{ // 如果方块的固定位置超出高度 , 结束游戏
GameOver();
return;
}
else
g_World[g_CurBlock.xi % 4][g_CurBlock.y - i / 4] = 1;
}
b = 1;
}
// 检查是否需要消掉行,并标记
int row[4] = {0};
bool bRow = false;
for(y = g_CurBlock.y; y = max(g_CurBlock.y - 3, 0); y--)
{
i = 0;
for(x = 0; xWIDTH; x)
if (g_World[x][y] == 1)
i;
if (i == WIDTH)
{
bRow = true;
row[g_CurBlock.y - y] = 1;
setfillstyle(WHITE, DIAGCROSS2_FILL);
bar(0, (HEIGHT - y - 1) * SIZESIZE / 2 - 2, WIDTH * SIZE - 1, (HEIGHT - y - 1) * SIZESIZE / 22);
}
}
if (bRow)
{
// 延时 200 毫秒
Sleep(200);
// 擦掉刚才标记的行
IMAGE img;
for(i = 0; i4; i)
{
if (row[i])
{
for(y = g_CurBlock.y - i1; yHEIGHT; y)
for(x = 0; xWIDTH; x)
{
g_World[x][y - 1] = g_World[x][y];
g_World[x][y] = 0;
}
getimage(img, 0, 0, WIDTH * SIZE, (HEIGHT - (g_CurBlock.y - i1)) * SIZE);
putimage(0, SIZE, img);
}
}
}
// 产生新方块
NewBlock();
}
用C语言绘制围棋棋盘#include"graphics.h"
#include"conio.h"
void main()
{
initgraph(640,480);
for(int x=1;x20;x)//划纵的19条线
line(x*20,40,x*20,400);
for(int y=2;y21;y)//划横的19条线
line(20,y*20,380,y*20);
getch();
closegraph();
}
怎样用c语言编写五子棋的棋盘棋盘如果没有界面,那种有线和框的,就用0放在每个位置 , 当作一个位置,玩家1如果放下子的话,就将0变成1,玩家2放下棋子,0变成2
复杂的界面,就去找MFC、QT吧
struct stu//定义位置记录结构体
{
int x;
int y;
}weizhi;
int player=1;
int Q[20][20]={0}; //定义数组以记录落子情况
void drawqipan() //绘制棋盘及数据初始化
{
int i,j;
system("cls"); //清除屏幕
for(i=0;i20;i)
{
for(j=0;j20;j)
{
Q[i][j]=0;
printf("十");
}
printf("\n");
}
weizhi.x=0;weizhi.y=0; //程序数据初始化
gotoxy(0,0);
}
C语言—五子棋求大神帮忙看看,设计是按输入的坐标打印棋子 。可打不出来几个问题c语言初始化棋盘函数:
weizhi这个存放坐标c语言初始化棋盘函数的数组需要用二维数组c语言初始化棋盘函数,否则只能存放一行位置;
初始化棋盘的动作从draw函数里移出来,放在main函数里做,draw只负责把当前棋盘和棋子画出来,初始化棋盘就是输入棋盘的大?。?
存放棋子的二维数组p需要初始化;
draw画棋盘的时候,要判断p数组对应存放c语言初始化棋盘函数了什么字符来决定输出什么内容;
判断棋子超过棋盘范围,只需要检查输入的坐标x和y是否都比棋盘小就可以了 , 放在for循环里,每次都会被执行到 。
代码改了一下,你看一看 。
#includestdio.h
#define N 20
#define X 10
struct zuobiao
{
int x;
int y;
};
struct zuobiao weizhi[N][N];
char p[N][N];
int len;
void draw ();
void main()
{
int i,j;
int a,b;
memset(p, 0, N*N);
printf ("Please input the five_chess's board\n");
scanf ("%d", len);
draw();
printf ("请输入一个坐标:例如 3,4 \n");
scanf("%d,%d", a,b);
if(a = len || b = len)
printf("棋子超过棋盘范围\n");
for(i=0;ilen;i)
{
for(j=0;jlen;j)
{
if ((weizhi[i][j].x==a)(weizhi[i][j].y==b))
{
p[a][b]='@';
draw();
}
}
}
}
void draw()
{
int i,j,k;
for (i = 0; ilen; i)
{
if(i==0)
printf("=",i);
else
printf("-", i );
}
printf("\n");
for (i = 0; ilen; i)
{
printf ("-", i );
for (k = 0; k len; k)
{
if(p[i][k] == 0)
printf ("十");
else
printf ("%c ", p[i][k]);
weizhi[i][k].x=i;
weizhi[i][k].y=k;
}
printf ("\n");
}
}
用C语言设计一个“三子棋”的游戏 , 要求用上下左右光标控制 。要程序源代码!#include iostream
#include string
using namespace std;
class CGobang//棋子类
{
private:
char chSort;//棋子的类别
int nWin;//赢棋的次数
int nLose;//输棋的次数
static int nDraw;//平局次数
static char achBoard[3][3];//棋盘
static int nSize;//棋盘的尺寸 nSize X nSize
public:
CGobang(char chsort)//构造函数,决定一方棋子的类别
{
chSort=chsort;
nWin=nLose=nDraw=0;
}
void PlayTurn(void);//走1步棋
int Judge();//判断是否连成一线,是则返回1,否则返回0
void Win(void);//赢棋
void Lose(void);//输棋
static void Draw(void);//平局
void PrintInfo(void);//输出总体情况
static void PrintBoard(void);//输出棋盘
static int GetFull(void);//判断棋盘是否已布满棋子
static void InitialBoard(void);//初始化棋盘
};
char CGobang::achBoard[3][3];
int CGobang::nSize = 3;
int CGobang::nDraw = 0;
void CGobang::Draw()
{
cout"\n\n\t\t平局!\n\n";
nDraw;
}
void CGobang::InitialBoard()//初始化棋盘
{
for(int i=0;inSize;i)
for(int j=0;jnSize;j)
achBoard[i][j]=' ';
}
void CGobang::PrintBoard()//输出棋盘
{
coutendl;
cout"123 "endl;
cout"1 "achBoard[0][0]" | "achBoard[0][1]" | "achBoard[0][2]endl;
cout" ---|---|---"endl;
cout"2 "achBoard[1][0]" | "achBoard[1][1]" | "achBoard[1][2]endl;
cout" ---|---|---"endl;
cout"3 "achBoard[2][0]" | "achBoard[2][1]" | "achBoard[2][2]endl;
coutendl;
coutendl;
}
int CGobang::GetFull()//判断棋盘是否布满棋子,若是返回1
{
for(int i=0;inSize;i)
for(int j=0;jnSize;j)
if(achBoard[i][j]!=' ')
return 0;
return 1;
}
void CGobang::Win()//赢棋
{
cout"\n\n\t\t"chSort"方获胜!\n\n";
nWin;
}
void CGobang::Lose()//输棋
{
nLose;
}
void CGobang::PlayTurn(void)//走1步棋
{
int nRow,nCol;
cout "现在该 "chSort" 方下棋,请输入棋盘坐标(x,y):";
do
{
cinnRownCol;//输入坐标
if(nRownSize || nColnSize)//判断坐标越界
cout "输入的坐标越界,x与y的范围应小于等于"nSize",请重新输入\n";
else if(achBoard[nRow-1][nCol-1]!=' ')//判断坐标合理
cout "棋盘("nRow ","nCol ")处已有棋子,请重新输入\n";
else
{
achBoard[nRow-1][nCol-1]=chSort;//在坐标处放上棋子
break;//退出循环
}
}while(1);
}
int CGobang::Judge()//判断是否棋子连成一线,若是返回1
{//以下是各种可能连成一线的情况
if(achBoard[0][0]==chSortachBoard[1][1]==chSortachBoard[2][2]==chSort)
return 1;
else if(achBoard[2][0]==chSortachBoard[1][1]==chSortachBoard[0][2]==chSort)
return 1;
else if(achBoard[0][0]==chSortachBoard[1][0]==chSortachBoard[2][0]==chSort)
return 1;
else if(achBoard[0][1]==chSortachBoard[1][1]==chSortachBoard[2][1]==chSort)
return 1;
else if(achBoard[0][2]==chSortachBoard[1][2]==chSortachBoard[2][2]==chSort)
return 1;
else if(achBoard[0][0]==chSortachBoard[0][1]==chSortachBoard[0][2]==chSort)
return 1;
else if(achBoard[1][0]==chSortachBoard[1][1]==chSortachBoard[1][2]==chSort)
return 1;
else if(achBoard[2][0]==chSortachBoard[2][1]==chSortachBoard[2][2]==chSort)
return 1;
else
return 0;//没有连成一线则返回0
}
void CGobang::PrintInfo(void)//打印总体情况
{
cout "Side "chSort"方共计赢 "nWin" 局,输 "nLose" 局,平 "nDraw" 局 。"endl;
}
void PrintRule(void)//打印规则
{
cout"\t\t欢迎使用三子连珠游戏!"endlendl;
cout"\t游戏规则:"endl;
cout"\t1.每1步输入要下棋的格子的x,y坐标,按Enter键\n";
cout"\t2.有1方首先3个棋子连成一线即判获胜\n";
cout"\t3.当棋子布满棋盘但仍无获胜方即为平局\n";
cout"\t4.X方先行\n";
cout"\n\n\t\t请按任意键开始下棋!\n\n";
}
int JudgePlay(CGobangSideX,CGobangSideO)//每下1步要进行输赢的判断,有结果则返回1
{
if(SideX.Judge())//X方获胜
{
SideX.Win();
SideO.Lose();
return 1;
}
else if(SideO.Judge())//O方获胜
{
SideO.Win();
SideX.Lose();
return 1;
}
else
return 0;
}
void Play(CGobangSideX,CGobangSideO)//开始一局游戏
{
while(1)
{
CGobang::PrintBoard();//输出棋盘
SideX.PlayTurn();//X方下棋
if(JudgePlay(SideX,SideO))//判断输赢
break;
if(CGobang::GetFull())//判断是否平局
{
CGobang::Draw();
break;
}
CGobang::PrintBoard();//输出棋盘
SideO.PlayTurn();//O方下棋
if(JudgePlay(SideX,SideO))//判断输赢
break;
if(CGobang::GetFull())//判断是否平局
{
CGobang::Draw();
break;
}
}
}
int main(void)
{
CGobang SideX('X'),SideO('O');//定义两个棋子类对象,分别代表X方与O方
PrintRule();
cin.get();
string strChoice;
do
{
CGobang::InitialBoard();//初始化棋盘
Play(SideX,SideO);//开始下一局
cout"是否继续(Y/N)?";
cinstrChoice;
}while(strChoice == "Y" || strChoice == "y");
SideX.PrintInfo();
SideO.PrintInfo();
cout"\n\n\t欢迎再次使用三子连珠游戏!"endlendl;
return 0;
}
c语言棋盘制表符格式问题#include stdio.h
#include stddef.h
#include locale.h
/*各种棋盘制表符
*wchar_t类型,头文件stddef.h
*printf 打印格式%lc
*打印前必须调用setlocale(LC_ALL, "")
*该函数原型在locale.h中
*/
#define TOPL'┳'
#define DOWNL'┻'
#define LEFTL'┣'
#define RIGHTL'┫'
#define MIDDLEL'╋'
#define LEFTTOPL'┏'
#define RIGHTTOPL'┓'
#define LEFTDOWNL'┗'
#define RIGHTDOWNL'┛'
#define WHITESTONE L'○'
#define BLACKSTONE L'●'
/*宏,在x,y处下黑白子,颠倒了黑白棋子的颜色,
因为控制台背景是黑色*/
#define SETBLACK(arr,x,y) arr[y][x]=WHITESTONE
#define SETWHITE(arr,x,y) arr[y][x]=BLACKSTONE
void init_board(wchar_t arr[][15])
{
/*初始化棋盘数据*/
int x,y;
for(x=0;x15;x)
for(y=0;y15;y)
arr[x][y]=MIDDLE;/*全部置为中间的制表符*/
for(x=0;x15;x)
{
arr[0][x]=TOP;
arr[14][x]=DOWN;
arr[x][0]=LEFT;
arr[x][14]=RIGHT; /*设置四条边*/
}
arr[0][0]=LEFTTOP;
arr[0][14]=RIGHTTOP;
arr[14][14]=RIGHTDOWN;
arr[14][0]=LEFTDOWN;/*设置四个角*/
}
void show_board(wchar_t arr[][15])
{
/*显示棋盘*/
int x,y;
setlocale(LC_ALL, "");
printf("\n");
for(x=0;x15;x)
{
for(y=0;y15;y)
printf("%lc",arr[x][y]);
printf("\n");
}
}
int main()
{
/*测试一下*/
wchar_t board[15][15];
init_board(board);/*初始化棋盘*/
show_board(board);/*看一下效果*/
SETBLACK(board,0,3);/*下几个黑白子*/
SETBLACK(board,0,4);
SETWHITE(board,1,3);
SETWHITE(board,1,4);
show_board(board);/*再看一下效果*/
return 0;
}
c语言初始化棋盘函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言象棋棋盘、c语言初始化棋盘函数的信息别忘了在本站进行查找喔 。

    推荐阅读