当前位置:文档之家› 五子棋(双人对战) C语言课程设计.doc

五子棋(双人对战) C语言课程设计.doc

C语言程序设计题目五子棋(双人对战)指导教师曹东燕学生姓名夏文龙于文杰邢健学号 201000802032 201000802114 201000802097专业电子信息工程教学单位物理系(盖章)目录1设计内容与设计要求 (1)1.1系统功能简介 (1)1.2系统运行环境 (1)2程序流程图 (1)3运行的运行及说明 (2)3.1系统的运行 (2)3.2运行说明 (4)4课程设计目的………………………………………………….5 程序特色 (5)6总结 (5)附件:源程序清单 (5)1设计内容与设计要求1.1系统功能简介该系统是五子棋的人人对战模式,而非平常的人机对战系统有简单的菜单界面1.2系统运行环境Vc++6.0下运行,硬件基本无要求,现在的计算机系统基本都可以运行该系统。

2程序流程图3系统的运行及说明3.1系统的运行图3-1程序的初始化界面程序初始化的界面,界面简洁明快,便于观察。

图3-2程序的运行界面图3-3程序的介绍界面3-2运行说明A向左 W向上 D向右 S向左空格键确定当结束时按Y重新开始游戏按N退出游戏4课程设计目的五子棋游戏不仅能增强人们的抽象思维能力、逻辑推理能力、空间想象力,提高人们的记忆力、心算能力等,而且深含哲理,有助于修身养性。

五子棋既有现代休闲方式所特有的特征“短、平、快” ,又有中国古典哲学所包含的高深学问“阴阳易理” ;它既有简单易学的特点,为人民群众所喜闻乐见,又有深奥的技巧;既能组织举办群众性的比赛、活动,又能组织举办高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观,它是中西方文化的交融点,也是中西方文化交流的一个平台。

自从计算机作为游戏对战平台以来,各种棋类游戏如雨后春笋般纷纷冒出。

五子棋是一种受大众广泛喜爱的游戏,其规则简单,变化多端,非常富有趣味性和消遣性。

同时具有简单易学、既动手又动脑的特点。

同时也为锻炼自己的编程能力。

5程序特色本程序简洁明快,采用黑白两色棋,并且本程序为双人对战。

6总结通过这次实习,让我们初步有了编写系统的能力,我们对很多的函数有了新的认识,也学会了运用多种函数,也明白了编写软件的基本过程,和基本方法。

编写软件的过程中我们又学到了曾经自己不知道的函数或是自己不会的函数的用法。

这次课程设计课总的来说让我受益匪浅。

在这几天的编写过程中我们对c语言有了更进一步的认识和了解。

此次编程过程的经验和知识肯定能促进我以后的学习。

此次课程设计不仅给了我们很多很好的经验,也让我们体会到了失败时的焦急和难受,也体会到了成功时的兴奋与喜悦。

附件:源程序清单#include <stdio.h>#include <conio.h>#include <stdlib.h>void main(){//q:20*20棋盘数据数组,0表示空,1表示黑棋,2表示白棋//h:游戏状态量,变化范围为0、1、2,0表示退出游戏,1表示初始化游戏数据,2表示进行游戏//i:循环辅助量//j:键盘输入结果//k:从二维坐标得到的一维数组下标//l:黑白子变化辅助量,变化范围为1、2,1为当前下的是黑棋,2为当前下的的是白棋//m:输赢判断结果,变化范围为0、1、2,0表示没有输赢,1表示黑棋赢,2表示白棋赢//x:游标的X坐标//y:游标的Y坐标char q[400];int h, i, j, k, l, m, x, y;//第一次进入游戏循环,首先初始化游戏数据h = 1;while (h){if (h == 1){//初始化棋盘for (i = 0; i < 400; ++i)q[i] = 0;//初始化黑白子变化辅助量,黑棋先行l = 2;//初始化输赢判断结果,当前没有输赢m = 0;//初始化游标坐标x = y = 0;//初始化完毕进行游戏h = 2;}else{//清屏system("cls");//绘制棋子、棋盘for (i = 0; i < 400; ++i){if (y * 20 + x == i){if (q[i] == 1)printf("■");else if (q[i] == 2)printf("□");elseprintf("◎");}else{if (q[i] == 1)printf("●");else if (q[i] == 2)printf("○");else{if (i == 0)printf("┏");else if (i == 19)printf("┓");else if (i == 380)printf("┗");else if (i == 399)printf("┛");else if (i > 0 && i < 19)printf("┳");else if (0 == i % 20)printf("┣");else if (19 == i % 20)printf("┫");else if (i > 380 && i < 399)printf("┻");elseprintf("╋");}}if (19 == i % 20)printf("\n");}//接收输入j = _getch();//更新游标坐标if (y > 0 && (j == 'w' || j == 'W')) --y;if (y < 19 && (j == 's' || j == 'S')) ++y;if (x > 0 && (j == 'a' || j == 'A')) --x;if (x < 19 && (j == 'd' || j == 'D')) ++x;//下子if (j == ' '){//从二维坐标转换到一维数组索引k = y * 20 + x;//设置数据if (0 == q[k])q[k] = (l = (l == 2) ? 1 : 2);//设置胜负判断结果m = 0;//左右胜负判断for (i = -4; i < 1; ++i){//边界判断if (x + i < 0 || x + i + 4 > 19)continue;else{//得到最左边棋子的索引k = y * 20 + x + i;//连棋判断,若成立则修改胜负判断结果if (q[k] == q[k + 1] &&q[k + 1] == q[k + 2] &&q[k + 2] == q[k + 3] &&q[k + 3] == q[k + 4]){m = l;break;}} }//上下胜负判断for (i = -4; i < 1; ++i){//边界判断if (y + i < 0 || y + i + 4 > 19)continue;else{//得到最上边棋子的索引k = (y + i) * 20 + x;//连棋判断,若成立则修改胜负判断结果if (q[k] == q[k + 20] &&q[k + 20] == q[k + 40] &&q[k + 40] == q[k + 60] &&q[k + 60] == q[k + 80]){m = l;break; } } }//左上右下胜负判断for (i = -4; i < 1; ++i){//边界判断if (x + i < 0 || x + i + 4 > 19 || y + i < 0 || y + i + 4 > 19)continue;else{//得到最左上边棋子的索引k = (y + i) * 20 + x + i;//连棋判断,若成立则修改胜负判断结果if (q[k] == q[k + 20 + 1] &&q[k + 20 + 1] == q[k + 40 + 2] &&q[k + 40 + 2] == q[k + 60 + 3] &&q[k + 60 + 3] == q[k + 80 + 4]){m = l;break; }} }//左下右上胜负判断for (i = -4; i < 1; ++i){//边界判断if (x + i < 0 || x + i + 4 > 19 || y - i > 19 || y - i - 4 < 0)continue;else{//得到最左下边棋子的索引k = (y - i) * 20 + x + i;//连棋判断,若成立则修改胜负判断结果if (q[k] == q[k - 20 + 1] &&q[k - 20 + 1] == q[k - 40 + 2] &&q[k - 40 + 2] == q[k - 60 + 3] &&q[k - 60 + 3] == q[k - 80 + 4]){m = l;break; } }} }//胜利结果选择if (m != 0){//打印胜利结果if (m == 1)printf("白棋胜利!\n");elseprintf("黑棋胜利!\n");//用户输入选择do{printf("重新游戏请按Y,退出游戏请按N:\n");j = _getch();} while (j != 'y' && j != 'Y' && j != 'n' && j != 'N');//根据选择设置游戏状态if (j == 'y' || j == 'Y')h = 1;else h = 0;} } }}。

相关主题