当前位置:文档之家› 五子棋c#实训报告

五子棋c#实训报告

五子棋c#实训报告
五子棋c#实训报告

九江学院

实训报告

实训名称:Java编程

指导老师:李兴南雷波

姓名:肖世明

学号:11208020103

班级:理学A1221

提交日期:2015年10月20日1.实训目的:

通过本实训,应达到如下目标:

理解委托的概念,掌握线程之间通过委托与控件交互的方法。

理解异常处理的机制,掌握异常处理语句的用法。

理解线程的概念,掌握多线程编程的一般方法。

掌握基于TCP的应用编程技术。

2.实训题目:

通过开发一款网络对战五子棋游戏,熟练掌握Java网络编程技术,亲历一个项

目开发的流程

3.功能描述:

程序基本功能描述如下:

实训项目要求使用Java编程语言,基于客户机/服务器(C/S)模式,开发一款网络对战五子棋游戏。服务器端可以支持多玩家同时在线游戏。玩家可以通过客户端登陆到服务器端与其它玩家进行五子棋游戏对战。

项目基本要求描述如下:

1.当服务器“启动服务”之后,可以允许玩家连接服务器;当服务器“停

止服务”之后,不允许玩家连接服务器。

2.玩家请求登陆时需提交用户名,在没有“满员”和“重名”的情况下,

服务器允许玩家登陆;在“满员”或“重名”的情况下,服务器拒绝玩

家登陆。

3.玩家登陆成功之后,进入“游戏大厅”界面,并获得其他在线玩家的信

息,其他玩家也能获得该玩家的信息。

4.玩家注销登陆之后,断开与服务器的连接,并关闭“游戏大厅”界面。

5.玩家“落座”之后,进入“游戏桌”界面,并获得该桌玩家的信息。如

果有对家落座,对家也能获得该玩家落座的信息。其他玩家也能获得该

玩家的状态的改变。

6.玩家“起身”之后,进入“游戏大厅”界面。如果有对家落座,对家也

能获得该玩家起身的信息。其他玩家也能获得该玩家的状态的改变。

7.玩家“请求开始”游戏之后,初始化“棋盘”界面,玩家进入“就绪”

状态。如果有对家也处于“就绪”状态,则开始游戏。其他玩家也能获

得该玩家的状态的改变。

8.游戏开始之后,首先黑方“行棋”,之后双方轮流行棋。

9.玩家“落子”之后,对家也能获得“棋盘”状态的改变。如果玩家“获

胜”,对家能得知自己“失败”;否则双方继续“行棋”。

10.玩家“请求和棋”之后,对家能获得其请求。对家可以“同意和棋”,

也可以“拒绝和棋”。如果对家同意和棋,则和局;否则游戏继续进

11.上述要求是本项目的基本要求,也可新增积分排行榜和保存棋局等

功能。

4.设计说明:

服务器功能

(1)服务器提供一个五子棋的游戏厅,拥有多个游戏桌(1~100),每桌有两个座位,0代表黑方,1代表白方。

(2)服务器启动服务后,创建一个线程专门监听玩家的连接请求。服务器一旦接受一个连接,就创建一个与玩家对应的线程,用于接受玩家信息,并提供相应的服务。玩家退出后,其对应的线程便自动终止,并给出相应提示。可限制玩家人数(1~300)。

客户端功能

(1)客户端连接成功后,创建一个接收线程,用于接受服务器发送信息。

(2)接受的信息处理。

5.源代码

(1)sever:

GameTable:

class GameTable

{

private const int None = -1;

private const int Black = 0;

private const int White = 1;

public Player[] gamePlayer;

private int[,] grid = new int[15, 15];

private System.Timers.Timer timer;

private int NextdotColor = 0;

private ListBox listbox;

Random rnd = new Random();

Service service;

private int NextPlayer = -1;

private int gameType = 1;

public GameTable(ListBox listbox)

{

gamePlayer = new Player[2];

gamePlayer[0] = new Player();

gamePlayer[1] = new Player();

timer = new System.Timers.Timer();

timer.Elapsed += new ElapsedEventHandler(timer_Elapsed); timer.Enabled = false;

this.listbox = listbox;

service = new Service(listbox);

ResetGrid();

public void ResetGrid()

{

for (int i = 0; i <= grid.GetUpperBound(0); i++)

{

for (int j = 0; j <= grid.GetUpperBound(1); j++) {

grid[i, j] = None;

}

}

gamePlayer[0].grade = 0;

gamePlayer[1].grade = 0;

}

public void StartTimer()

{

if (NextdotColor == 0)

{

NextPlayer = 0;

NextdotColor = 1;

}

}

public void StopTimer()

{

}

public void SetTimerLevel(int interval)

{

gameType = interval;

}

private void timer_Elapsed(object sender, EventArgs e) {

}

public void SetDot(int i, int j, int dotColor)

{

grid[i, j] = dotColor;

service.SendToBoth(this, string.Format("SetDot,{0},{1},{2}", i, j, dotColor));

if (gameType == 1)

{

if ((i > 1 && grid[i - 1, j] == dotColor && grid[i - 2, j] == dotColor) || (i > 0 && i < grid.GetUpperBound(0) - 1 && grid[i - 1, j] == dotColor && grid[i + 1, j] == dotColor)

|| (i < grid.GetUpperBound(0) - 2 && grid[i + 1, j] == dotColor && grid[i + 2, j] == dotColor))

{

ShowWin(dotColor);

}

if ((j > 1 && grid[i, j - 1] == dotColor && grid[i, j - 2] == dotColor) || (j > 0 && j < grid.GetUpperBound(1) - 1 && grid[i, j - 1] == dotColor && grid[i, j + 1] == dotColor)

|| (j < grid.GetUpperBound(1) - 2 && grid[i, j + 1] == dotColor && grid[i, j + 2] == dotColor))

{

ShowWin(dotColor);

}

if ((i > 1 && j > 1 && grid[i - 1, j - 1] == dotColor && grid[i - 2, j - 2] == dotColor)

|| (i > 0 && i < grid.GetUpperBound(0) - 1 && j > 0 && j <

grid.GetUpperBound(1) - 1 && grid[i - 1, j - 1] == dotColor && grid[i + 1, j + 1] == dotColor) || (i < grid.GetUpperBound(0) - 2 && j < grid.GetUpperBound(1) - 2 && grid[i + 1, j + 1] == dotColor && grid[i + 2, j + 2] == dotColor))

{

ShowWin(dotColor);

}

if((i > 1 && j < grid.GetUpperBound(1) - 2 && grid[i - 1, j + 1] == dotColor && grid[i - 2, j + 2] == dotColor)

|| (i > 0 && i < grid.GetUpperBound(0) - 1 && j > 0 && j <

grid.GetUpperBound(1) - 1 && grid[i - 1, j + 1] == dotColor && grid[i + 1, j - 1] == dotColor) || (i < grid.GetUpperBound(0) - 2 && j > 1 && grid[i + 1, j - 1] == dotColor && grid[i + 2, j - 2] == dotColor))

{

ShowWin(dotColor);

}

}

else

{

if ((i > 3 && grid[i - 1, j] == dotColor && grid[i - 2, j] == dotColor && grid[i - 3, j] == dotColor && grid[i - 4, j] == dotColor)

|| (i > 2 && i < grid.GetUpperBound(0) - 1 && grid[i - 1, j] == dotColor && grid[i - 2, j] == dotColor && grid[i - 3, j] == dotColor && grid[i + 1, j] == dotColor) || (i > 1 && i < grid.GetUpperBound(0) - 2 && grid[i - 1, j] == dotColor && grid[i - 2, j] == dotColor && grid[i + 1, j] == dotColor && grid[i + 2, j] == dotColor) || (i > 0 && i < grid.GetUpperBound(0) - 3 && grid[i - 1, j] == dotColor && grid[i + 1, j] == dotColor && grid[i + 2, j] == dotColor && grid[i + 3, j] == dotColor) || (i < grid.GetUpperBound(0) - 4 && grid[i + 1, j] == dotColor && grid[i + 2, j] == dotColor && grid[i + 3, j] == dotColor && grid[i + 4, j] == dotColor))

{

ShowWin(dotColor);

}

if ((j > 3 && grid[i, j - 1] == dotColor && grid[i, j - 2] == dotColor && grid[i, j - 3] == dotColor && grid[i, j - 4] == dotColor)

|| (j > 2 && j < grid.GetUpperBound(1) - 1 && grid[i, j - 1] == dotColor && grid[i, j - 2] == dotColor && grid[i, j - 3] == dotColor && grid[i, j + 1] == dotColor) || (j > 1 && j < grid.GetUpperBound(1) - 2 && grid[i, j - 1] == dotColor && grid[i, j - 2] == dotColor && grid[i, j + 1] == dotColor && grid[i, j + 2] == dotColor) || (j > 0 && j < grid.GetUpperBound(1) - 3 && grid[i, j - 1] == dotColor && grid[i, j + 1] == dotColor && grid[i, j + 2] == dotColor && grid[i, j + 3] == dotColor) || (j < grid.GetUpperBound(1) - 4 && grid[i, j + 1] == dotColor && grid[i, j + 2] == dotColor && grid[i, j + 3] == dotColor && grid[i, j + 4] == dotColor))

{

ShowWin(dotColor);

}

if ((i > 3 && j > 3 && grid[i - 1, j - 1] == dotColor && grid[i - 2, j - 2] == dotColor && grid[i - 3, j - 3] == dotColor && grid[i - 4, j - 4] == dotColor)

|| (i > 2 && i < grid.GetUpperBound(0) - 1 && j > 2 && j <

grid.GetUpperBound(1) - 1 && grid[i - 1, j - 1] == dotColor && grid[i - 2, j - 2] == dotColor && grid[i - 3, j - 3] == dotColor && grid[i + 1, j + 1] == dotColor)

|| (i > 1 && i < grid.GetUpperBound(0) - 2 && j > 1 && j <

grid.GetUpperBound(1) - 2 && grid[i - 1, j - 1] == dotColor && grid[i - 2, j - 2] == dotColor && grid[i + 1, j + 1] == dotColor && grid[i + 2, j + 2] == dotColor)

|| (i > 0 && i < grid.GetUpperBound(0) - 3 && j > 0 && j <

grid.GetUpperBound(1) - 3 && grid[i - 1, j - 1] == dotColor && grid[i + 1, j + 1] == dotColor && grid[i + 2, j + 2] == dotColor && grid[i + 3, j + 3] == dotColor)

|| (i < grid.GetUpperBound(0) - 4 && j < grid.GetUpperBound(1) - 4 && grid[i + 1, j + 1] == dotColor && grid[i + 2, j + 2] == dotColor && grid[i + 3, j + 3] == dotColor && grid[i + 4, j + 4] == dotColor))

{

ShowWin(dotColor);

}

if((i > 3 && j < grid.GetUpperBound(1) - 4 && grid[i - 1, j + 1] == dotColor && grid[i - 2, j + 2] == dotColor && grid[i - 3, j + 3] == dotColor && grid[i - 4, j + 4] == dotColor)

|| (i > 2 && i < grid.GetUpperBound(0) - 1 && j > 0 && j <

grid.GetUpperBound(1) - 3 && grid[i - 1, j + 1] == dotColor && grid[i - 2, j + 2] == dotColor && grid[i - 3, j + 3] == dotColor && grid[i + 1, j - 1] == dotColor)

|| (i > 1 && i < grid.GetUpperBound(0) - 2 && j > 1 && j <

grid.GetUpperBound(1) - 2 && grid[i - 1, j - 1] == dotColor && grid[i - 2, j - 2] == dotColor && grid[i + 1, j + 1] == dotColor && grid[i + 2, j + 2] == dotColor)

|| (i > 0 && i < grid.GetUpperBound(0) - 3 && j > 2 && j <

grid.GetUpperBound(1) - 1 && grid[i - 1, j + 1] == dotColor && grid[i + 1, j - 1] == dotColor && grid[i + 2, j - 2] == dotColor && grid[i + 3, j - 3] == dotColor)

|| (i < grid.GetUpperBound(0) - 4 && j > 3 && grid[i + 1, j - 1] == dotColor && grid[i + 2, j - 2] == dotColor && grid[i + 3, j - 3] == dotColor && grid[i + 4, j - 4] == dotColor))

{

ShowWin(dotColor);

}

}

}

private void ShowWin(int dotColor)

{

timer.Enabled = false;

gamePlayer[0].started = false;

gamePlayer[1].started = false;

this.ResetGrid();

service.SendToBoth(this, string.Format("Win,{0},{1},{2}",

dotColor, gamePlayer[0].grade, gamePlayer[1].grade));

}

public void UnsetDot(int i, int j, int color)

{

if (color == NextPlayer)

{

SetDot(i, j, color);

NextPlayer = (NextPlayer + 1) % 2;

}

}

}

Player:

struct Player

{

public User user;

public bool started;

public int grade;

public bool someone;

}

Service:

class Service

{

private ListBox listbox;

private delegate void AddItemDelegate(string str);

private AddItemDelegate addItemDelegate;

public Service(ListBox listbox)

{

this.listbox = listbox;

addItemDelegate = new AddItemDelegate(AddItem);

}

public void AddItem(string str)

{

if (listbox.InvokeRequired)

{

listbox.Invoke(addItemDelegate, str);

}

else

{

listbox.Items.Add(str);

listbox.SelectedIndex = listbox.Items.Count - 1; listbox.ClearSelected();

}

}

public void SendToOne(User user, string str)

{

try

{

user.sw.WriteLine(str);

user.sw.Flush();

AddItem(string.Format("向{0}发送{1}", https://www.doczj.com/doc/5c7039155.html,erName, str));

}

catch

{

AddItem(string.Format("向{0}发送信息失败", https://www.doczj.com/doc/5c7039155.html,erName));

}

}

public void SendToBoth(GameTable gameTable, string str)

{

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

{

if (gameTable.gamePlayer[i].someone == true)

{

SendToOne(gameTable.gamePlayer[i].user, str);

}

}

}

public void SendToAll(System.Collections.Generic.List userList, string str) {

for (int i = 0; i < userList.Count; i++)

{

SendToOne(userList[i], str);

}

}

}

User:

class User

{

public TcpClient client { get; private set; }

public StreamReader sr { get; private set; }

public StreamWriter sw { get; private set; }

public string userName { get; set; }

public User(TcpClient client)

{

this.client = client;

https://www.doczj.com/doc/5c7039155.html,erName = "";

NetworkStream netStream = client.GetStream();

sr = new StreamReader(netStream, System.Text.Encoding.UTF8);

sw = new StreamWriter(netStream, System.Text.Encoding.UTF8);

}

}

Form1:

public partial class Form1 : Form

{

private int maxUsers = 100;

System.Collections.Generic.List userList = new List();

private int maxTables = 50;

private GameTable[] gameTable;

IPAddress localAddress;

private int port = 51888;

private TcpListener myListener;

private Service service;

public Form1()

{

InitializeComponent();

service = new Service(listBox1);

}

private void btn1_Click(object sender, EventArgs e)

{

listBox1.Items.Clear();

gameTable = new GameTable[maxTables];

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

{

gameTable[i] = new GameTable(listBox1);

}

myListener = new TcpListener(localAddress, port);

myListener.Start();

service.AddItem(string.Format("开始在{0}:{1}监听客户连接", localAddress, port));

ThreadStart ts = new ThreadStart(ListenClientConnect);

Thread myThread = new Thread(ts);

myThread.Start();

btn1.Enabled = false;

btn2.Enabled = true;

}

private void btn2_Click(object sender, EventArgs e)

{

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

{

gameTable[i].StopTimer();

}

service.AddItem(string.Format("目前连接用户数:{0}", userList.Count)); service.AddItem("开始停止服务,并依次使用户退出!");

for (int i = 0; i < userList.Count; i++)

{

userList[i].client.Close();

}

myListener.Stop();

btn1.Enabled = true;

btn2.Enabled = false;

}

private void Form1_Load(object sender, EventArgs e)

{

listBox1.HorizontalScrollbar = true;

IPAddress[] addrIP = Dns.GetHostAddresses(Dns.GetHostName());

localAddress = addrIP[0];

btn2.Enabled = false;

}

private void ListenClientConnect()

{

while (true)

{

TcpClient newClient = null;

try

{

newClient = myListener.AcceptTcpClient();

}

catch

{

break;

}

ParameterizedThreadStart pts = new ParameterizedThreadStart(ReceiveData);

Thread threadReceive = new Thread(pts);

User user = new User(newClient);

threadReceive.Start(user);

userList.Add(user);

service.AddItem(string.Format("{0}进入",

newClient.Client.RemoteEndPoint));

service.AddItem(string.Format("当前连接用户数:{0}", userList.Count)); }

}

private void ReceiveData(object obj)

{

User user = (User)obj;

TcpClient client = user.client;

bool normalExit = false;

bool exitWhile = false;

while (exitWhile == false)

{

string receiveString = null;

try

{

receiveString = user.sr.ReadLine();

}

catch

{

service.AddItem("接收数据失败");

}

if (receiveString == null)

{

if (normalExit == false)

{

if (client.Connected == true)

{

service.AddItem(string.Format(

"与{0}失去联系,已终止接收该用户信息",

client.Client.RemoteEndPoint));

}

RemoveClientfromPlayer(user);

}

break;

}

service.AddItem(string.Format("来自{0}:{1}", https://www.doczj.com/doc/5c7039155.html,erName, receiveString));

string[] splitString = receiveString.Split(',');

int tableIndex = -1;

int side = -1;

int anotherSide = -1;

string sendString = "";

string command = splitString[0].ToLower();

switch (command)

{

case"login":

if (userList.Count > maxUsers)

{

sendString = "Sorry";

service.SendToOne(user, sendString);

service.AddItem("人数已满,拒绝" +

splitString[1] + "进入游戏室");

exitWhile = true;

}

else

{

https://www.doczj.com/doc/5c7039155.html,erName = string.Format("[{0}--{1}]", splitString[1], client.Client.RemoteEndPoint);

sendString = "Tables," + this.GetOnlineString();

service.SendToOne(user, sendString);

}

break;

case"logout":

service.AddItem(string.Format("{0}退出游戏室", https://www.doczj.com/doc/5c7039155.html,erName)); normalExit = true;

exitWhile = true;

break;

case"sitdown":

tableIndex = int.Parse(splitString[1]);

side = int.Parse(splitString[2]);

gameTable[tableIndex].gamePlayer[side].user = user;

gameTable[tableIndex].gamePlayer[side].someone = true;

service.AddItem(string.Format(

"{0}在第{1}桌第{2}座入座",

https://www.doczj.com/doc/5c7039155.html,erName, tableIndex + 1, side + 1));

anotherSide = (side + 1) % 2;

if (gameTable[tableIndex].gamePlayer[anotherSide].someone == true)

{

sendString = string.Format("SitDown,{0},{1}", anotherSide,

gameTable[tableIndex].gamePlayer[anotherSide]https://www.doczj.com/doc/5c7039155.html,erName);

service.SendToOne(user, sendString);

}

sendString = string.Format("SitDown,{0},{1}", side,

https://www.doczj.com/doc/5c7039155.html,erName);

service.SendToBoth(gameTable[tableIndex], sendString);

service.SendToAll(userList, "Tables," + this.GetOnlineString());

break;

case"getup":

tableIndex = int.Parse(splitString[1]);

side = int.Parse(splitString[2]);

service.AddItem(

string.Format("{0}离座,返回游戏室", https://www.doczj.com/doc/5c7039155.html,erName));

gameTable[tableIndex].StopTimer();

service.SendToBoth(gameTable[tableIndex],

string.Format("GetUp,{0},{1}", side, https://www.doczj.com/doc/5c7039155.html,erName));

gameTable[tableIndex].gamePlayer[side].someone = false;

gameTable[tableIndex].gamePlayer[side].started = false;

gameTable[tableIndex].gamePlayer[side].grade = 0;

anotherSide = (side + 1) % 2;

if (gameTable[tableIndex].gamePlayer[anotherSide].someone ==

true)

{

gameTable[tableIndex].gamePlayer[anotherSide].started = false;

gameTable[tableIndex].gamePlayer[anotherSide].grade = 0;

}

service.SendToAll(userList, "Tables," + this.GetOnlineString());

break;

case"level":

tableIndex = int.Parse(splitString[1]);

gameTable[tableIndex].SetTimerLevel(int.Parse(splitString[2])); service.SendToBoth(gameTable[tableIndex], receiveString);

break;

case"talk":

tableIndex = int.Parse(splitString[1]);

sendString = string.Format("Talk,{0},{1}", https://www.doczj.com/doc/5c7039155.html,erName,

receiveString.Substring(splitString[0].Length +

splitString[1].Length));

service.SendToBoth(gameTable[tableIndex], sendString);

break;

case"start":

tableIndex = int.Parse(splitString[1]);

side = int.Parse(splitString[2]);

gameTable[tableIndex].gamePlayer[side].started = true;

if (side == 0)

{

anotherSide = 1;

sendString = "Message,黑方已开始。";

}

else

{

anotherSide = 0;

sendString = "Message,白方已开始。";

}

service.SendToBoth(gameTable[tableIndex], sendString);

if (gameTable[tableIndex].gamePlayer[anotherSide].started == true)

{

gameTable[tableIndex].ResetGrid();

gameTable[tableIndex].StartTimer();

}

break;

case"unsetdot":

tableIndex = int.Parse(splitString[1]);

side = int.Parse(splitString[2]);

int xi = int.Parse(splitString[3]);

int xj = int.Parse(splitString[4]);

int color = int.Parse(splitString[5]);

gameTable[tableIndex].UnsetDot(xi, xj, color);

break;

default:

service.SendToAll(userList, "什么意思啊:" + receiveString);

break;

}

}

userList.Remove(user);

client.Close();

service.AddItem(string.Format("有一个退出,剩余连接用户数:{0}", userList.Count));

}

private void RemoveClientfromPlayer(User user)

{

for (int i = 0; i < gameTable.Length; i++)

{

for (int j = 0; j < 2; j++)

{

if (gameTable[i].gamePlayer[j].user != null)

{

if (gameTable[i].gamePlayer[j].user == user)

{

StopPlayer(i, j);

return;

}

}

}

}

}

private void StopPlayer(int i, int j)

{

gameTable[i].StopTimer();

gameTable[i].gamePlayer[j].someone = false;

gameTable[i].gamePlayer[j].started = false;

gameTable[i].gamePlayer[j].grade = 0;

int otherSide = (j + 1) % 2;

if (gameTable[i].gamePlayer[otherSide].someone == true)

{

gameTable[i].gamePlayer[otherSide].started = false;

gameTable[i].gamePlayer[otherSide].grade = 0;

if (gameTable[i].gamePlayer[otherSide].user.client.Connected == true) {

service.SendToOne(gameTable[i].gamePlayer[otherSide].user,

string.Format("Lost,{0},{1}",

j, gameTable[i].gamePlayer[j]https://www.doczj.com/doc/5c7039155.html,erName));

}

}

}

private string GetOnlineString()

{

string str = "";

for (int i = 0; i < gameTable.Length; i++)

{

for (int j = 0; j < 2; j++)

{

str += gameTable[i].gamePlayer[j].someone == true ? "1" : "0";

}

}

return str;

}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)

{

if (myListener != null)

{

btn2_Click(null, null);

}

}

}

(2)client:

Service:

class Service

{

ListBox listbox;

StreamWriter sw;

public Service(ListBox listbox, StreamWriter sw) {

this.listbox = listbox;

this.sw = sw;

}

public void SendToServer(string str)

{

try

{

sw.WriteLine(str);

sw.Flush();

}

catch

{

AddItemToListBox("发送数据失败");

}

}

delegate void ListBoxDelegate(string str);

public void AddItemToListBox(string str)

{

if (listbox.InvokeRequired)

{

ListBoxDelegate d = AddItemToListBox;

listbox.Invoke(d, str);

}

else

{

listbox.Items.Add(str);

listbox.SelectedIndex = listbox.Items.Count - 1; listbox.ClearSelected();

}

}

}

DotColor:

public enum DotColor

{

None = -1,

Black = 0,

White = 1

}

FormRoom:

public partial class FormRoom : Form

{

private int maxPlayingTables;

private CheckBox[,] checkBoxGameTables;

五子棋游戏的设计与实现毕业设计论文

毕业论文(设计)题目五子棋游戏的设计与实现

毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作者签名:日期: 指导教师签名:日期: 使用授权说明 本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。 作者签名:日期:

学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。 作者签名:日期:年月日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 涉密论文按学校规定处理。 作者签名:日期:年月日 导师签名:日期:年月日

五子棋Java实验报告

五子棋JAVA实验报告 目录 五子棋JA V A实验报告 (1) 一、实验目的和要求 (2) 二、五子棋的基本常识与原理 (2) 三、五子棋的系统设计 (3) 四、五子棋的实现与测试 (7) 五、分析与总结 (10) 六、附录 (12)

一、实验目的和要求 1、能够用编程语言实现一个简单的五子棋程序 2、在实际系统中使用、实现人工智能的相关算法 3、进一步加深对人工智能算法的理解 二、五子棋的基本常识与原理 1、五子棋的起源 五子棋,是一种两人对弈的纯策略型棋类游戏,亦称“串珠”、“连五子”;是中国民间非常熟知的一个古老棋种。相传,它起源于四千多年前的尧帝时期,比围棋的历史还要悠久。亦有传说,五子棋最初流行于少数民族地区,以后渐渐演变成围棋并在炎黄子孙后代中遍及开来。 五子棋发展于日本,流行于欧美。容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。 传统五子棋的棋具与围棋相同,棋子分为黑白两色,棋盘为19X19,棋子放置于棋盘线交叉点上。两人对局,各执一色,轮流下一子,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。因为传统五子棋在落子后不能移动或拿掉,所以也可以用纸和笔来进行游戏。 2、五子棋的基本常识 与任何一种竞技棋一样,五子棋的每一局棋也分为三个阶段:开局,中局和残局。 五子棋的开始阶段称为开局,或称布局。其开局阶段是十分短暂的,大约在七着与十几着之间。在这一阶段的争夺中,双方的布局,应对将对以后的胜负起着极为关键的作用。在开局阶段取得的形势好坏,主动与被动,先手与后手的优劣程度,往往直接影响中局的战斗。因此积极处理好开局和开局向中局的过渡十分重要。 五子棋是从一至五,逐渐布子,发展连系,同时运用限制和反限制的智慧,在连子的过程中为自己的棋子争得相对的主动权和优势,逐步扩展优势,或者从劣势转化为优势,击溃对方的防线,最后连五取胜或抓禁手取胜或迫使对方投子认负。 3、五子棋比赛的相关规定 (1) 职业连珠规则 a. 黑方先下子,白后下,从天元开始相互顺序落子。 b. 最先在棋盘横向、竖向、斜向形成连续的相同色五个棋子的一方为胜。 c. 黑棋禁手判负,白棋无禁手。黑棋禁手包括“三三”(包括“四三三”)、“四四”(包括“四四三”)、

五子棋游戏设计与实现毕业设计

南京工程学院 毕业设计说明书(论文) 题目:五子棋游戏设计与实现

毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作者签名:日期: 指导教师签名:日期: 使用授权说明 本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。 作者签名:日期:

学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。 作者签名:日期:年月日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 涉密论文按学校规定处理。 作者签名:日期:年月日 导师签名:日期:年月日

五子棋实训报告

五子棋实训报告 五子棋实训报告 篇一: (3)棋子的绘制与存储棋子的绘制用实心圆模式,颜色为黑色及 白色两种。 棋子在内存中的存储方式: 因为表示各个棋子的数据类型都相同,所以考虑用数组存储,因 为棋盘是二维的,因此棋子用二维数组a存储。 a{ setTitle{ Objet obj = e.getSoure } toolbar = ne JPanel{ } publi int getX{ } publi int getY{ } publi Color getColor{ } return olor; return ; return x; this.x = x; this. = ; this.olor = olor;篇 四: 实习报告-五子棋 信息工程学院 201X年毕业实习报告 班级: 计科XX 姓名: XXX 实习地点: XXXXXX 实习12周-19周

一、实习目的 1. 夯实专业基础,提高动手能力。 把专业知识应用于实践,找出专业薄弱环节加强巩固。 3. 了解就业单位的计算机技术的应用情况、需求情况和发展方向及前景,培养实践能力、分析问题和解决问题的能力以及综合运用所学基础知识和基本技能的能力,同时也增强了适应社会的能力和就业竞争力。 4. 挖掘自身潜力,寻找自身不足,通过实践对未来做出合理规划。 二、实习任务 在MElipse的平台上运用java语言,学习开发一个常用小游戏:五子棋。 三、实习计划 5. 基础夯实,联系实践。 在信息高速发展的今天,计算机科学技术的重要性也在人们的日常生活中日益突显。不管是从事理论教学还是从事软件的设计和开发,基础都是最有力的保障。思想决定行动,认识决定成败。没有正确的思想作为指导,行动就会陷入盲目和被动。缺乏正确的认识基础,前途就会迷茫,方向就会迷失,机会就会丧失。所以说,理论学习是我增强行动自觉的重要保证。人常说:“经济基础决定上层建筑”专业基础对我来说就是经济基础,而上层建筑就是我们所从事的相关工作。但是只拥有专业基础还是不行的,所以,我必须要把理论应用于实践。这也是此次实习课程的重要所在,以专业基础知识为重要依托,以专

五子棋课程设计实验报告

西南交通大学 程序语言综合课程设计 五子棋游戏 课程《程序语言综合课程设计》 学院信息科学与技术学 专业软件工程 姓名 学号 20119050 日期 2016年月日

目录 第一章课程设计的目的和要求 (3) 1.1 课程设计的目的 (3) 1.2 课程设计的要求 (3) 1.3 课程设计的实验环境 (3) 第二章功能描述 (4) 第三章总体设计 (5) 3.1 功能模块设计 (5) 3.1.1 任务执行流程图 (5) 3.1.2 下棋函数流程图 (6) 3.2 数据结构设计 (7) 3.2.1 定义结构体 (7) 3.2.2 定义数组 (7) 3.2.3 全局变量 (7) 3.3 函数功能描述 (7) 第四章程序实现 (8) 4.1源码分析 (8) 4.2运行结果及界面介绍 (25) 第五章后记 (30)

第一章课程设计的目的和要求 1.1 课程设计的目的 1.加深对C语言数据类型,运算,语句结构及其程序设计的基本方法理解和掌握; 2.熟练掌握流程图的绘制、程序设计文档的书写; 3.通过编写一个完整的程序,一方面可以检查我们这学期的学习情况,为以后的学习打下坚实的基础; 4.熟悉C语言游戏编程,掌握五子棋游戏开发的基本原理,从而为以后的程序开发奠定基础。 1.2 课程设计的要求 1、编写程序代码,调试所写程序使其能够正确运行; 2、能进行基本的五子棋操作,有图形界面,能够用键盘操作; 3、能够实现悔棋、存档和读档等附加功能 1.3 课程设计的实验环境 该课程设计在设计与实验过程中需要在windows XP系统/windows 2000以上系统中进行,程序设计要求在visual C++6.0平台中进行,完成代码的编写、编译、调试、测试等工作。本游戏对计算机硬件和操作系统要求极低,所以在这里只是把自己的电脑硬件参数和系统参数列下: 硬件:Cpu:2.1GHZ,内存,2GB,硬盘:320GB,操作系统:windows xp 软件环境:安装VC++6.0

(完整版)五子棋本科毕业设计

第一章绪论 1.1开发背景: 游戏软件是当今世界发展最迅速,最有影响力,最有潜力与活力的领域之一?游戏软件深受广大青年人喜爱,而且在发达国家中老年人也有大部分喜欢游戏的,因此游戏软件在很大程度上给予绝大部分人精神上的娱乐?第二次世界大战以后,电子计算机技术得到了突飞猛进的发展?先是由晶体管代替了笨重的真空管,后来出现了集成电路和大规模集成电路,使电子子计算机一代一代实现更新,同时软件技术也发展迅速?在美国,集中了许多计算机软件的设计人才,他们工作之余,时常喜爱编一种能与人斗智的“游戏”,以此来锻炼编程的能力?这种“游戏”花样繁多,但其特点都是利用计算机软件事先设计好的“分析”?“判断”能力反过来与人较量?由于不断修改更新,使计算机的“智力”水平与人难分高低?到了90年代,游戏软件已经为世界各国的人使用,BLACKISLAND和Blizzard.这两个强大的游戏制作组起到了巨大的带动作用,还有中国的洛河工作室在国内也起到了巨大作用,他们让很多很多人喜欢上了游戏软件,打开了这个市场。如今游戏软件产业已经受到了广泛的关注,它年轻有潜力而且吸引人,让人们日益丰富的生活需求得以满足。 五子棋游戏更是吸引着不同年龄段的人群,无论男女老少都可以玩,都喜欢玩,而当前微型计算机已经是在广大人群中流行着,用电脑来下五子棋更是一种时尚。五子棋相传起源于四千多年前的尧帝时期,比围棋的历史还要悠久,可能早在“尧造围棋”之前,民间就已有五子棋游戏。有关早期五子棋的文史资料与围棋有相似之处,因为古代五子棋的棋具与围棋是完全相同的。在上古的神话传说中有“女娲造人,伏羲做棋”一说,《增山海经》中记载:“休舆之山有石焉,名曰帝台之棋,五色而文状鹑卵。”李

五子棋游戏实验报告

五子棋游戏实验报告 课程名称计算机程序设计(VB) 学号______________________ 姓名______________________ 班级______________________ 提交时间 五子棋软件设计 一、实验目的 1?通过五子棋软件设计或者自拟题目设计,巩固本课程所学的各个章节重点知识,自拟题目的同学需尽早向教师提岀自己的想法及设计方案。 2?通过开发一个较大的系统,增强软件开发能力。 3?通过调试系统,增强逻辑思维能力。 二、实验内容 1.基本要求: (1)输入两个对手名字,然后进入游戏界面。 (2)用鼠标点击的方式在棋盘上摆放棋子,黑白交替。(棋盘15*15 ) (3)可以悔棋。 (4)五子连在一起的时候能判断胜利,并且显示出胜利者的名字。 (5)能够将棋局的结果保存,保存该棋局

结束的状态、对手名字、棋局名字(棋局名字在保存时由用户在相应的界面下添入)(此功能要求用数据库和文件两种技术实现)。

因为棋盘上空点居多,大部分点的信息为0,因此只需保存有棋子的点的信息 用文件技术进行棋局保存,思路相同。 (7)五子棋恢复棋局 思路:首先从数据库文件中找到要恢复棋局的数据(即曾经保存的数据),然后把这些数据赋值给内存中相应的数组或者变量中,按照这些数据重新绘制棋盘和棋子,即完成了对棋局的恢复。 窗体启动事件应该完成的事情: 组合框中应该显示曾经保存的棋局名。因为每次保存棋局时,都是将棋局所有棋子的记录添加在表的最 后,因此表中关于棋局名的记录只能是类似于aaabbbbccccc的形式,而不可能是abbcacc的形式,根据 这个特点编程序取出表中不同的棋局名。 具体算法: 用一个字符串变量strfile初始值为空,从表的顶端向下依次移动记录指针,如果当前记录的棋局名字段和strfile不相等,说明进入另一个棋局的记录中,将该棋局记录的棋局名赋值给strfile,并加入到组合 框中,一直到表中最后一个记录 因为要从数据库中取岀相关数据到a数组中,因此要将a数组所有数据清零。 要建立一个data控件,与数据库连接起来,而后识别棋局(即表中的棋局名字段与在列表框中选择的棋 局名比较),将数据库该棋局中所有信息都赋值给a数组及相关变量。 刚才仅仅是数据的恢复,即将数据库中已经保存过的数据恢复到内存中,下一步应该根据内存中的数据重新绘制棋盘以及棋子。 重新绘制棋盘是独立的一块功能,因此考虑用全局子过程来实现,该子过程定义在模块中。思路如下: 清屏一绘制棋盘一根据a数组中的每一项的两个下标来决定绘制棋子的位置,根据每一项的值是1还是 2来决定在该位置绘制何颜色的棋子。 决定该黑白方走的blackwhite变量当时没有保存,可以采用在数据库中保存的方式来解决,本例中解决方法是通过数黑白棋子个数来决定恢复棋局后该谁走的。 因此设置了一个变量做计数器,每走一步棋计数器的值加一。 用文件技术实现棋局恢复,思路相同。 (8)悔棋 悔一步棋:用几个变量来表示关于一步棋的几个信息,每次下子都将该子的信息赋值给那几个变量,悔 一步棋即将那几个变量所表示的点的a数组信息清零。而后调用paint ()过程重画。 以上是教师带着学生完成的软件功能。 遗留问题:保存棋手姓名和棋局名并在恢复棋局的时候显示。(需要同学们自己完成)思路:在数据表中多建立两个字段,分别表示两个棋手姓名,同其它数据的保存类似。 三、设计日期 十二月 四、完成日期 十二月 五、实验体会 其实,一开始学习vb我就对它不抱有一定的热情,可能是因为要用到计算机以及编程问题,当时一想到有代码,就会无比的苦恼,但是为了让这门课顺利通过,我还是怀着一颗必须要学的心情。起初,我对待这门新课程和其他课

jv五子棋毕业设计整套

1引言 随着计算机技术的不断发展,网络技术的普及范围越来越广,网络能够提供的服务多样、便捷,已经成为人们生产生活中不可缺少的重要组成部分。如今网络休闲游戏发展迅速,它凭借健康、方便、互动性强、益智等诸多优点,成为大部分现代人休闲娱乐的首选。 网络五子棋游戏是使用Java语言开发的一款游戏。它使用SOCKET建立连接,多线程处理数据,以及可嵌入网络浏览器的APPLET作为客户端,这些特点使这款游戏无论是服务器还是客户端的实现都相对容易。通过对该软件的编写,还可以巩固学生对以上各种知识的掌握和理解。

2 JAVA语言概述 2.1 JAVA简介 JAVA是Sun Microsystem公司开发的编程语言,是一个简单,面向对象,分布式,解释性,强壮,安全,与系统无关,可移植,高性能,多线程和动态的语言。 2.1.1 JAVA的基本特点 (1) 简单性 Java与C++语言非常相近,但Java比C++简单,它抛弃了C++中的一些不是绝对必要的功能,如头文件、预处理文件、指针、结构、运算符重载、多重继承以及自动强迫同型。 Java实现了自动的垃圾收集,简化了内存管理的工作。 (2) 面向对象 Java提供了简单的类机制和动态的构架模型。对象中封装了它的状态变量和方法,很好地实现了模块化和信息隐藏;而类则提供了一类对象的原型,通过继承和重载机制,子类可以使用或重新定义父类或超类所提供的方法,从而既实现了代码的复用,又提供了一种动态的解决方案。 (3) 多线程 多线程使应用程序可以同时进行不同的操作,处理不同的事件。在多线程机制中,不同的线程处理不同的任务,他们之间互不干涉,不会由于一处等待影响其他部分,这样容易实现网络上的实时交互操作。 (4) 分布性 Java是面向网络的语言。通过它提供的类库可以处理TCP/IP协议,用户可以通过URL地址在网络上很方便的访问其他对象。 (5) 体系结构中立 Java是一种网络语言,为使Java程序能在网络的任何地方运行,Java解释器生成与体系结构无关的字节码结构的文件格式。为了使Java的应用程序能不依赖于具体的系统,Java语言环境还提供了用于访问底层操作系统功能的类组成的包,当程序使用这些包时,可以确保它能运行在各种支持Java的平台上。 (6) 安全性 用于网络、分布环境下的Java必须要防止病毒的入侵,Java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就防止了程序员使用欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。 2.1.2 Java中输入/输出流概念 过滤流DataInputStream 和DataOutputStream 除了分别作为FilterInputStream 和FilterOutputStream的子类外,还分别实现了接口DataInput 和DataOutput。接口DataInput 中定义的方法主要包括从流中读取基

五子棋C++实验报告

(此文档为word格式,下载后您可任意编辑修改!)

一、需求分析 1.1开发背景 电脑游戏行业经过二十年的发展,已经成为与影视、音乐等并驾齐驱的全球最重要的娱乐产业之一,其年销售额超过好莱坞的全年收入。互联网的出现为电脑游戏行业发展注入了新的活力,凭借信息双向交流、速度快、不受空间限制等优势,让真人参与游戏,提高了游戏的互动性、仿真性和竞技性,使玩家在虚拟世界里可以发挥现实世界无法展现的潜能,改变了单机版游戏固定、呆板、与机器对话的状况。网络游戏的这些优势不仅使其在电脑游戏行业中异军突起并在某种程度上取代了单机版游戏,而且成为网络业三大(网上金融、网上教育和网络游戏)赢利且利润优厚的领域之一。 网络作为一种新兴的传播方式,主要包括三大内容:娱乐、资讯、通讯。提到网络娱乐,过去主要指的是单机版游戏,没有引入网络的概念但随着科技的发展,游戏娱乐产业也在成长目前,国内的游戏娱乐产业正处于起步阶段,特点表现为:第一,它是一种文化的传播。娱乐产业可以潜移默化地改变人的观念,当前,很多多媒体的播放已被电脑网络所取代。第二,网络游戏加强了人与人的沟通。第三,网络游戏具有一定的教育意义。网络游戏所具有的角色扮演的功能,使得玩家能通过互助更好地完成游戏中的各项任务。网络无国界,游戏在网络文化产业世界的发展中地位会越来越高。 目前在国外,休闲游戏如棋类等,玩家的年龄跨度非常大,这和我国目前网游市场以青少年为主要消费人群的状况截然不同。其实,网络可以解决空间的问题,网络和生活越来越息息相关,因此,开辟适合各个年龄层的游戏产品迫在眉睫。同时,这也涉及到一个企业开发的能力。娱乐产业发展到一定程度,通过不断锻炼和经验的积累,完全可以通过融入娱乐的成分把教条的东西深入浅出地展现给消费者。 就国内的发展来看,最近這两三年内国内的游戏公司如雨后春笋般的成立,所开发或代理的网络游戏更是不胜枚举。以全球游戏业界的发展来看,這几年韩国的表现最为突出,特別是在网络游戏的技术研发兴游戏制作,其所发行的网络游戏更成为全球游戏产业重要的指标之一。去年在美国洛杉矶所举行的 E3(Electronic Entertainment Exposition)展中,已经有几家的韩国厂商挤入世界第一线的游戏开发厂商之列。 近几年来,由于 3D 硬体绘图技术的突破,使得即时描绘的书面越来越精致,而且3D遊戏性更多元化更逼近真实世界,因此在遊戏产业中,3D 游戏已经逐渐取代2D游戏为游戏市场的主流,即使是网络游戏,也慢慢趋向3D化。然而游戏3D化将会带来的游戏开发上的困难等问题,这些问题以后都需要逐步解决。 人们面对电脑的时间越来越多,面对身边的人的时间越来越少,所以我们游戏所要达到的目的就是加大人们之间的沟通,让大家随时随地都可以体验到玩游戏的乐趣。而三子棋是一种受大众广泛喜爱的游戏,其规则简单,变化多端,非常富有趣味性和消遣性。同样的,通过这个游戏,既能在休闲时刻娱乐一下,也能在压力面临的时候放松一刻。

(完整版)五子棋游戏的设计与实现毕业设计

毕业论文(设 计) 题目五子棋游戏的设计与实 现 所在院(系)数学与计算机科学学 院

专业班级信息与计算科学1101班 指导教师拓守恒 完成地点陕西理工学院 2015年5 月18日

五子棋游戏的设计与实现 作者:王勇 (陕理工学院数学与计算机科学学院信息与计算科学专业1101班,陕西汉中 723000) 指导教师:拓守恒 [摘要]五子棋是起源于我国古代的黑白棋种之一,是一种简单的娱乐性较强的大众游戏,深受广大玩家的喜爱,但同时作为比赛,五子棋游戏还有着深奥的技巧。 本系统的实现采用了C语言的模块化的程序设计方式,用Visual C++ 6.0软件来实现程序的编译运行。实现黑白两方分别落子,通过棋盘上方的棋盘动态信息提示,轮流落子,本系统中游戏的每一个功能在程序中都是一个相对独立的模块,比如,棋盘模块,棋子模块,选择游戏模式模块,悔棋模块等等在程序中都是独立的,但它们之间通过逻辑关系的链接又构成了一个可以使游戏正常运行的程序。 为实现游戏的双人对战模式和人机对战模式,并使得游戏尽量的简单化,本系统需要达成以下目标:设计一个简洁的游戏初始界面;制定合法规则,使游戏能公正的进行,并且可以断定胜;支持人机对战模式,可以是电脑通过人工智能和合法规则选出最优落子位置;可以悔棋,在玩家落子落错位置时,可按下悔棋键进行悔棋。 [关键词]五子棋,游戏设计,C语言,双人对战,人机对战,人工智能

Designer and implementation of gobang game Author: wangyong (Grade11,Class 1, Major in Information and computing science, Mathematics and computer science Dept. Tutor: Tuo shouheng Abstract:Gobang is one of the black and white kind of originated in ancient China, is a simple and entertaining stronger mass games, loved by the majority of players, but at the same time as the game, gobang game with profound skills. The implementation of this system method, using Visual C + + 6.0 software to realize the program compiler running. Implementation of black and white two parties move later, respectively, by the board at the top of the dynamic message board, take turns to move later, this game in the system each function in the program is a relatively independent modules, such as, the board module, pawn module, select game mode module, back module and so on in the program are independent, but the link through the logical relationship between them and form a can make the normal operation of the game program. In order to realize the double mode and man-machine game mode, and make the game as far as possible the simplification, the system needs to achieve the following goals: design a simple game of initial interface;the legal rules, can make the game fair, and you can call;support the man-machine

五子棋系统实验报告

湖南工业大学 课程设计任务书 2015—2016学年第2 学期 计算机与通信学院(系、部)计算机科学与技术专业计算机1502班级课程名称:面向对象程序设计 设计题目:五子棋 完成期限:自2016年6月13日至2016年6月19日共1周

指导教师(签字):年月日 系(教研室)主任(签字):年月日

面向对象程序设计课程设计 设计说明书 五子棋 起止日期: 2016年6月13日至 2016年6月18日 学生姓名王回 班级计算机1502学号15408100209成绩 指导教师(签字) 计算机与通信学院 2016年 6 月 18日

五子棋 一、课题的介绍和课题的任务 设计的课题名称:五子棋 实现以下功能: 功能1、模拟真实棋盘棋子 功能2、模拟人与人对战下棋 功能3、模拟实时胜负判断 功能4、模拟棋局的存储与读取 二、设计的要求 具有动画功能(即图像能即时移动),能实现人与人进行简单的对玩,能实现简单的胜负判断 三、系统的分析和系统中类的设计 CWZQApp类作用:初始化应用程序及运行该程序的所需要的成员函数CWZQDoc类作用:存放应用程序的数据以及实现文件的保存,加载功能 CMainFrame类作用:管理应用程序的窗口,显示标题栏,状态栏,工具栏等,同时处理针对窗口操作的信息 CAboutDlg类作用:向导自动生成对话框类 CWZQView类作用:管理视图窗口,在框架窗口中实现用户数据的显示和打印,存放添加的功能模块

CWZQView类中的成员函数与数据成员: void Save(); //**** //保存文件 void OnOpen() //打开文件 void over(CPoint point);//**** //检查是否结束voidOnDraw(CDC* pDC) //画棋盘函数 void OnLButtonUp(UINT nFlags, CPoint point)//模拟下棋函数 HCURSOR hcursorwhite; //**** //两个鼠标 HCURSOR hcursorblack; //**** intwzq[19][19]; //**** //棋盘数组 boolcolorwhite; //**** // colorwhite TRUE时白棋下, 否则黑棋下 CBitmapm_bmblack; //**** //棋子位图 CBitmapm_bmwhite; //**** void CWZQView::OnDraw(CDC* pDC) //构造棋盘,显示白棋以及黑棋 GetDocument() //获取文档指针,在视图中显示文档内容 CBrush //用于构造CBrush对象,然后传给需要画 刷的CDC成员函数 pDC->FillRect(myrect1,&mybrush1) // 画黑框线 四、系统的实现及调试 添加的功能: 1.图标,光标以及位图的绘制 程序运行开始鼠标在进入棋盘界面未放下棋子时变为类似棋子光标,此处需要描绘2种棋子光标: 黑白鼠标Cursor以替换当前鼠标: IDC_CURSOR1 黑棋子 IDC_CURSOR2 白棋子 说明: 由于下棋时我们必须把鼠标热点设置在中间,点击下图(图3-1-3)最右边按扭,然后把鼠标移动到图像中你想设置为热点的地方,按下鼠标左键。

Java五子棋毕业设计论文

题目:JAVA五子棋对弈程序的设计与实现

目录 摘要 .................................................................... I Abstract ............................................................... II 1 引言 (1) 2五子棋对弈程序的可行性分析 (1) 2.1 五子棋系统设计思路 (1) 2.2 经济可行性分析 (1) 2.3技术上的可行性 (1) 2.4 管理上的可行性 (2) 3 JAVA五子棋对弈现的需求分析 (2) 3.1 用户需求分析 (2) 3.1.1 普通用户主要需要: (2) 3.1.2 系级管理员主要需要: (2) 3.1.3 系统用例图: (3) 3.2 数据字典的描述 (3) 3.2.1用户信息表的数据字典的描述: (3) 3.2.2用户每次游戏信息表的数据字典描述: (4) 3.2.3 用户每盘棋信息表的数据字典描述: (4) 3.2.4 用户每步棋信息表的数据字典描述: (4) 3.3五子棋对弈系统的数据流图 (4) 3.3.1 用户登录数据流图(DFD) (5) 3.3.2普通用户界面显示数据流图(DFD) (5) 3.3.3管理员用户界面显示数据流图(DFD) (6) 3.3.4用户棋局回放数据流图(DFD) (6) 4 JAVA五子棋对弈系统分析与设计 (7) 4.1 系统设计总体思想、目标 (7) 4.2 五子棋人机对弈系统的ER模型 (7) 4.3 JAVA五子棋对弈系统结构、功能设计 (9) 4.3.1 系统结构设计 (9) 4.3.2 系统功能模块设计 (10) 4.3.3设计思路 (11) 4.4 程序设计分析 (11) 4.5 类的设计 (12) 4.6五子棋对弈系统的数据库设计 (15) 4.6.1 系统用户表 (15) 4.6.2 用户棋局表 (16) 4.6.3 用户棋盘表 (16) 4.6.4 用户下棋信息表 (17) 5五子棋相关基础 (17) 5.1 五子棋相关解释 (17) 5.2 五子棋相关规则 (17) 5.3 五子棋常用术语 (18) 6 系统平台、计算模式及技术 (19)

基于C语言的五子棋程序毕业课程设计报告

(此文档为WORD格式,下载后您可任意编辑修改!) 石家庄铁道学院课程设计 基于C语言的五子棋程序课程设计 单位:数0901分院(系) 专业:数学与应用数学 学号: 学生姓名:许晓倩 指导教师:石玉晶 完成日期 2010年 07月 14日

摘要 本程序是一款棋类益智游戏程序,与五子棋游戏相近,是由C语言编写的可在WINDOWS 系统下运行的娱乐游戏平台。该程序面向广大棋类游戏的爱好者,能够提供方便,实现基本智能控制的游戏环境。本程序可以实现人人对战,用户可以根据需要自行选择不同维数的棋盘。对战中,为方便双方棋手,采用键盘上的上下左右键控制棋子的上下左右移动,由空格键控制下棋,双方都可通过ESC键终止游戏。游戏开始后,红、白双方轮流下棋,程序会根据双方下棋的先后顺序自动显示不同颜色的棋子,提示当前下棋的棋手,任何一方由三子连成一线时,游戏结束,结束时会显示对战双方胜负情况。 关键词:五子棋游戏应用程序,C语言,图形函数。

目录 1.选题的意义4 2.系统功能需求分析 2.1设计思想-5 2.2功能模块-5 2.3流程图说明6 3.系统设计---7 3.1流程图---7 3.2数据结构-7 3.3中心算法代码说明v 4.系统实现---9 4.1程序代码--9 4.2系统使用--24 4.3运行效果说明4 5.总结 5.1设计收获--25 5.2存在的主要问题 5.3参考文献--25

第1章选题的意义 总的来说,通过五子棋的设计,能使我掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能并熟悉分支、循环、数组、函数等的综合运用。 这次课程设计我们在学习了C语言之后第一次一个人设计程序,以前在完成作业时虽然也写程序,但当时的程序通常都是很短的,涉及到的知识点也通常比较单一。这次的课程设计则是对我们这半年学习的C语言的中分支、循环、数组、函数等知识的综合运用,也是对我们所学知识的一个综合考察。在运用这些知识的时候也锻炼了软件开发所需要的问题分析、系统设计、程序编码、测试等基本方法和技能,为我们以后从事软件开发打下基础。另外,在这个五子棋游戏的设计过程中还会涉及到我们在C语言课堂上没有涉及到的图形设计,这又未尝不是一个学习新知识的好机会。我希望自己通过查阅资料,在编写程序,调试程序的过程中,独立掌握这一知识,并将它正确运用到我的程序中来。 其次,五子棋是一款非常简单的棋类游戏,我从小学六年级就就开始玩五子棋,那时候用的还是自己画的棋盘,到大学有了更多的充裕时间,我开始经常的玩QQ游戏中的五子棋,对五子棋浓厚的兴趣使我在看到这一课题的时候马上选择了它,虽然五子棋游戏的应用程序已经普遍,但身为棋迷的我希望将自己所学的知识应用到五子棋游戏中,设计出一款我自己的五子棋。

毕业设计网络五子棋的外文翻译

Renju is a very old two-player board game with subtle tactics and strategies. It comes from Japan and is a professional variant of Go-Moku. In many countries, such as China, Estonia, Japan, Latvia, Russia, and Sweden, Renju is played on a high level of performance. Compared to Renju, the game of Go-Moku, mainly played in China and Japan, has rather simple rules. Go-Moku was solved by Allis in 1992. He proved that it is a won game for the player to move first. In this note we claim that Renju is a first-player win too. We describe our research approach and how we arrived at this game-theoretical value. 1. INTRODUCTION In 1992 Allis solved the game of Go-Moku by means of the computer program VICTORIA (Allis, Van den Herik, and Huntjes, 1993; Allis, 1994). The main techniques applied were proof-number search (Allis, Van der Meulen, and Van den Herik, 1994) and threat-space search (Allis, Van den Herik, and Huntjes, 1995). Since the advantage for the first player was well-known (Sakata and Ikawa, 1981), many variants of Go-Moku were developed so as to reduce the advantage of the first player, attempting to create a balanced game. Already around 1900 Japanese professional players improved the simple rules of Go-Moku by introducing that the first player (Black) is prohibited from making a double three, a double four, and an overline.After that the Renju board was diminished from 1919 (Go board size) to 1515 when it was discovered that the larger board size increases Black!s advantage. These improvements were to restrict Black!s moves so as to offset his initial advantage. In 1936 ¤when the Japanese Federation of Renju was founded ¤the rules of Renju were fully accomplished. Professional players believed that the new rules would result in a more evenly-balanced game. When the Renju players became stronger they found that the above-mentioned advanced new rules still gave great advantage to Black. Some Japanese players even showed a black victory in two frequently-played opening patterns (cf. Sakata and Ikawa, 1981), but their solution was incomplete because some good white moves were not analysed and later on even mistakes were found in it. In the Sakata!s book ¤Figures 31 and 32 facing page 77 ¤japanese authors suggested an strong 15 th move (A, see Figure 1). After move A, if the White's reply was move B (16 th move), the Black victory will be become very complicated, but not fully analysed by pro players. White's defence move C (16 th move) is not mentioned in this book, after this White's response we were not able to find the Black victory in some weeks. So move A was rejected (and considered to be not good move) and we chose another 15 move (D), which turn out a success. Another problem was, that there are 35 distinct second white moves possible, but only two main variations (adjacent to Black!s first move) were exhaustively analysed in that book. In Japan professional Renju players continued to study Renju in detail. Sakata and Ikawa (1981) published their analysis in 32 pages. We have exploited the analysis for our work and found other mistakes and lacunae (see also Allis, 1994). Nevertheless, the Japanese prediction is now confirmed, extended and corrected by our computer program which established Renju!s game-theoretical value. Our project was to carry out a complete proof about the game of Renju by a computer program and to create a database of the solved game tree.

五子棋课程设计实验报告

C语言程序设计报告 题目: 五子棋 班级: 电气Q1041班 人数: 3人 小组成员: 周啸天、万广富、黄山奇

指导老师:桂超 时间: 2011.11.30

目录 第一章课程设计的目的和要求 (3) 1.1 课程设计的目的 (3) 1.2 课程设计的要求 (3) 1.3 课程设计的实验环境 (3) 第二章功能描述 (4) 第三章总体设计 (5) 3.1 功能模块设计 (5) 3.1.1 任务执行流程图 (5) 3.1.2 下棋函数流程图 (6) 3.2 数据结构设计 (7) 3.2.1 定义结构体 (7) 3.2.2 定义数组 (7) 3.2.3 全局变量 (7) 3.3 函数功能描述 (7) 第四章程序实现 (8) 4.1源码分析 (8) 4.2运行结果及界面介绍 (22) 第五章后记 (27)

第一章课程设计的目的和要求 1.1 课程设计的目的 1.加深对C语言数据类型,运算,语句结构及其程序设计的基本方法理解和掌握; 2.熟练掌握流程图的绘制、程序设计文档的书写; 3.通过编写一个完整的程序,一方面可以检查我们这学期的学习情况,为以后的学习打下坚实的基础; 4.熟悉C语言游戏编程,掌握五子棋游戏开发的基本原理,从而为以后的程序开发奠定基础。 1.2 课程设计的要求 1、编写程序代码,调试所写程序使其能够正确运行; 2、能进行基本的五子棋操作,有图形界面,能够用键盘操作; 3、能够实现悔棋、存档和读档等附加功能 1.3 课程设计的实验环境 该课程设计在设计与实验过程中需要在windows XP系统/windows 2000以上系统中进行,程序设计要求在visual C++6.0平台中进行,完成代码的编写、编译、调试、测试等工作。本游戏对计算机硬件和操作系统要求极低,所以在这里只是把自己的电脑硬件参数和系统参数列下: 硬件:Cpu:2.1GHZ,内存,2GB,硬盘:320GB,操作系统:windows xp 软件环境:安装VC++6.0

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