搜档网
当前位置:搜档网 › 黑白棋源代码

黑白棋源代码

黑白棋源代码
黑白棋源代码

JA V A课程设计黑白棋源代码|java课程设计|数据库课程设计|计算机课程设计|精品课程网站设计

import java.awt.*;import javax.swing.*;import java.awt.event.*;//建立一个大框架用来放置棋盘面板class Game extends JFrame{

int Max;//定义的棋盘大小为Max ×Max的正方形boolean ChessCheck = false;//定义一个变量,用来设置棋子是否能下在所在位置boolean IamFirst = true;//定义一个变量,用来判断轮到谁下棋,黑棋为true白棋为false JPanel mainPanel;//定义主面板Object[] options ={ "确定" };//警告框按钮String msg;//警告框信息public Game() { super("黑白棋(二人对战)");//窗口标题setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//默认窗口关闭按钮setLocation(200, 200); //设置组件位置X,Y坐标Image frame_icon = Toolkit.getDefaultToolkit().createImage(getClass().getResource("image\\bw.jpg"));//定义图标文件setIconImage(frame_icon);//设置窗口图标setVisible(true); mainPanel = new JPanel(); getContentPane().add(mainPanel); }}

//起始设置窗口//该窗口包含2个Label显示,其中一个为作者信息显示//另一个为输入提示,文本框用来输入棋盘大小//开始游戏按钮用来检查输入内容是否合法,若合法则进入游戏class Start extends JFrame{ Object[] options ={ "确定" }; String msg; JPanel S_panel; JLabel Msg; JLabel PMax; JTextField TMax; JButton GameStart; GameEvent bEGame; BorderLayout SLayout;

public Start() { super("黑白棋(二人对战)选择难度!"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocation(200, 200); //设置组件位置X,Y坐标setSize(400, 100); S_panel=new JPanel() ; Msg = new JLabel("程序制作:杜世忠Email:dushizhong@https://www.sodocs.net/doc/1017471187.html,"); PMax = new JLabel("选择方格。建议选择16以内,即16×16以下。必须为偶数。"); TMax = new JTextField("10"); GameStart=new JButton("开始游戏") ; bEGame = new GameEvent(); GameStart.addActionListener(bEGame); SLayout=new BorderLayout(2,2) ; getContentPane().add(S_panel); S_panel.setLayout(SLayout); S_panel.add("North",Msg); S_panel.add("West",PMax ); S_panel.add("Center", TMax); S_panel.add("South", GameStart); setVisible(true); setResizable(false); System.out.println("面板加载完成"); } //事件监听类,处理按钮事件class GameEvent implements ActionListener { public void actionPerformed(ActionEvent Ge) { System.out.println("进入监听"); Object Gobj = Ge.getSource(); if (Gobj == GameStart) { System.out.println("开始处理"); try{ //将输入的文本转换为int型,若输入不是数字则抛出异常int num= Integer.parseInt(TMax.getText()); if ((num % 2) == 0)//判断是否是偶数{ if (num < 8)//判断输入是否大于等于8 { PMax.setText("你输入了非法字符!必须输入大于等于8的偶数!"); //警告窗口msg = new String("你输入了非法字符!必须输入大于等于8的偶数!"); JOptionPane.showOptionDialog(null, msg, "输入错误!", JOptionPane.DEFAULT_OPTION, JOptionPane.W ARNING_MESSAGE, null, options, options[0]); } else { //输入符合要求进入游戏System.out.println("正在进入游戏!"); GameStart.setText(" 正在游戏中"); GameStart.setEnabled(false); new Chess_panel(num); } }

else //如果输入了奇数,提示并返回要求重新输入{ System.out.println("你输入了非法字符!必须输入偶数!"); PMax.setText("你输入了非法字符!必须输入偶数!

"); msg = new String("你输入了非法字符!必须输入偶数!"); JOptionPane.showOptionDialog(null, msg, "输入错误!", JOptionPane.DEFAULT_OPTION, JOptionPane.W ARNING_MESSAGE, null, options, options[0]);

} }catch(Exception e) { //如果输入的不是数字,抛出异常,并提示System.out.println("你输入了非法字符!必须为数字"+e); PMax.setText("你输入了非法字符!必须为数字!"); msg = new String("你输入了非法字符!必须输入数字!"); JOptionPane.showOptionDialog(null, msg, "输入错误!", JOptionPane.DEFAULT_OPTION, JOptionPane.W ARNING_MESSAGE, null, options, options[0]);

} } } }}//棋盘面板//棋盘面板包括黑白双方的下棋提示,双方棋子数量即时显示,功能按钮,总比分显示//功能按钮包括(结束,重新开始,让步,裁判)//功能描述:// 双方开始游戏之后,黑棋先下,当下棋过程中一方无子可下的时候点击让步按钮,让另一方继续下// 直到最后格子下完,或者双方都无子可下的时候,点击裁判按钮,算出胜负,记下比分,并重新开始游戏// 在下棋过程中,点击新一局按钮将重新开始新一局游戏,但是并不会保存当前游戏的比分。// 任意时刻按结束按钮,程序退出class Chess_panel extends Game{ int Mark1 = 0, Mark2 = 0;//定义双方的分数变量UserEvent bEObj; JButton Chess[][]; public Chess_panel(int input) { Max = input+2;//获取输入的棋盘大小参数setResizable(true); setSize(600, 600); GridLayout grid = new GridLayout(Max, Max); mainPanel.setLayout(grid); Chess = new JButton[Max][Max]; bEObj = new UserEvent(); //整个面板由按钮组成,按行列绘制for (int i = 0; i < Max; i++) {

for (int j = 0; j < Max; j++) { Chess[i][j] = new JButton(); Chess[i][j].setFont(new java.awt.Font("宋体", Font.PLAIN, 15)); if (i != 0 && i != Max - 1 && j != 0 && j != Max - 1) { Chess[i][j].setBackground(Color.green); } else { Chess[i][j].setEnabled(false); } mainPanel.add(Chess[i][j]); Chess[i][j].addActionListener(bEObj); this.setVisible(true); } } //设置外围棋盘按钮Chess[0][0].setText("黑"); Chess[0][1].setText("0"); //Chess[0][1].setEnabled(true); Chess[0][Max - 2].setText("白"); Chess[0][Max - 1].setText("0"); //Chess[0][Max - 1].setEnabled(true); Chess[0][Max / 2 - 2].setText("黑"); Chess[0][Max / 2 - 1].setText("方"); Chess[0][Max / 2].setText("先"); Chess[0][Max / 2 + 1].setText("下"); //设置棋盘默认初始状态Chess[(Max - 2) / 2][(Max - 2) / 2].setText("●"); Chess[(Max - 2) / 2 + 1][(Max - 2) / 2 + 1].setText("●"); Chess[(Max - 2) / 2][(Max - 2) / 2 + 1].setText("○"); Chess[(Max - 2) / 2 + 1][(Max - 2) / 2].setText("○"); //外围颜色,去掉按钮边框,设置按钮字体颜色for (int m = 0; m < Max; m++) { Chess[0][m].setBorder(null); Chess[Max - 1][m].setBorder(null); Chess[Max - 1][m].setForeground(Color.blue); Chess[0][m].setBackground(Color.yellow); Chess[Max - 1][m].setBackground(Color.yellow); } for (int m = 1; m < Max - 1; m++) { Chess[m][0].setBorder(null); Chess[m][Max - 1].setBorder(null);/* Chess[m][0].setText("◎"); Chess[m][Max - 1].setText("◎"); */Chess[m][0].setBackground(Color.yellow); Chess[m][Max - 1].setBackground(Color.yellow); } //功能按钮Chess[Max - 1][1].setEnabled(true); Chess[Max - 1][2].setEnabled(true); Chess[Max - 1][3].setEnabled(true); Chess[Max - 1][4].setEnabled(true); Chess[Max - 1][1].setText("结束"); Chess[Max - 1][2].setText("新一局"); Chess[Max - 1][3].setText("让步");

Chess[Max - 1][4].setText("裁判"); //比分显示Chess[Max - 1][6].setText("总比分");

Chess[Max - 1][7].setText("黑"+Mark1); Chess[Max - 1][8].setText("白"+Mark2); Chess[0][1].setBackground(Color.white); Chess[0][Max - 1].setBackground(Color.white); } //设置功能按钮的事件侦听事件class UserEvent implements ActionListener { public void actionPerformed(ActionEvent e) { Object obj = e.getSource(); //System.out.println("you have pressed a area"); if (obj == Chess[Max - 1][1]) { System.exit(1); }//退出按钮if (obj == Chess[Max - 1][2]) { new Reset(); }//退出按钮if (obj == Chess[Max - 1][3])//让步按钮{ if (IamFirst == false)//如果白棋让步{ IamFirst = true; Chess[0][0].setBackground(Color.red); Chess[0][Max-2].setBackground(Color.white); } else //如果黑棋让步{ IamFirst = false; Chess[0][0].setBackground(Color.white); Chess[0][Max-2].setBackground(Color.red); } } if(obj == Chess[Max - 1][4])//如果按裁判按钮,计算成绩{ int M1 = 0, M2 = 0; M1 = Integer.parseInt(Chess[0][1].getText()); M2 = Integer.parseInt(Chess[0][Max - 1].getText()); if (M1>M2){ System.out.println("黑棋胜"); msg = new String("裁判郑重宣布:\n胜利方为黑棋!\n恭喜恭喜!黑棋取得胜利!继续努力吧!\n白棋不要气馁,再接再厉!"); JOptionPane.showOptionDialog(null, msg, "成绩统计结果!", JOptionPane.DEFAULT_OPTION, JOptionPane.W ARNING_MESSAGE, null, options, options[0]); Mark1 = Mark1 + 1;//修改比分Chess[Max - 1][7].setText("黑" + Mark1); } if (M1

else { System.out.println("I am white"); rules(i, j, "○"); if (ChessCheck == true) { Chess[i][j].setText("○"); IamFirst = true; Chess[0][0].setBackground(Color.red); Chess[0][Max-2].setBackground(Color.white); WhoWin(); } } } } }

} } } /*下棋规则,以当前下棋的位置为中心,向其周围的8个方向散射搜寻。 1.如果其搜寻方向上的第一个棋子不是对方棋子,则停止该方向上的搜寻,设置该方向为不能ChessCheck=false 2.如果搜寻方向上的第一个棋子为对方棋子,则继续搜寻直到找到己方棋子则将中间部分的对方棋子变成己方棋子并设置该方向能ChessCheck=true,否则,设置标志为该方向不能ChessCheck=false 3.如果所有方向返回的都是不能ChessCheck=false */ public void rules(int i, int j, String chess) { boolean ChessCheck1 = false; boolean ChessCheck2 = false; boolean ChessCheck3 = false; boolean ChessCheck4 = false; boolean ChessCheck5 = false; boolean ChessCheck6 = false; boolean ChessCheck7 = false; boolean ChessCheck8 = false; //判断是谁下的棋String mychess; String yourchess; if (chess == "○") { mychess = "○"; yourchess = "●"; } else { mychess = "●"; yourchess = "○"; } System.out.println("你是" + mychess + "棋,对方是" + yourchess + "棋"); //检查右边System.out.println("检查右边"); if (Chess[i][j + 1].getText() != yourchess) { //System.out.println("右边第一个是我的棋子"); ChessCheck1 = false; } else { //向右移动找出是否有自己的棋子,如果有则吃掉对方的子,否则返回false //System.out.println("向右移动找出是否有自己的棋子,如果有则吃掉对方的子,否则返回false"); for (int m = 1; m < Max - j - 1; m++) { if (Chess[i][j + 1 + m].getText() == mychess)//如果是己方棋子{ //System.out.println("如果是己方棋子"); int n = 1; while (n <= m) { //System.out.println("吃掉己方2颗棋子中间的对方棋子"); Chess[i][j + n].setText(mychess);//吃掉己方2颗棋子中间的对方棋子n++; } ChessCheck1 = true; break; } else { ChessCheck1 = false; }//如果不是己方棋子,继续寻找} } //检查左边System.out.println("检查左边"); if (Chess[i][j - 1].getText() != yourchess) { ChessCheck2 = false; } else { //向左移动找出是否有自己的棋子,如果有则吃掉对方的子,否则返

回false //System.out.println("向左移动找出是否有自己的棋子,如果有则吃掉对方的子,否则返回false"); //System.out.println("左移的时候列数从大到小"); for (int m = j - 2; m > 0; m--)//左移的时候列数从大到小{ //System.out.println("如果是己方棋子"); if (Chess[i][m].getText() == mychess)//如果是己方棋子{ int n = 0; while (n <= j - m - 1) { //System.out.println("吃掉己方2颗棋子中间的对方棋子"); Chess[i][j - n - 1].setText(mychess);//吃掉己方2颗棋子中间的对方棋子n++; } ChessCheck2 = true; break; } else { ChessCheck2 = false; }//如果不是己方棋子,继续寻找} } //检查上方System.out.println("检查上方"); if (Chess[i - 1][j].getText() != yourchess) { ChessCheck3 = false; } else { //向上移动找出是否有自己的棋子,如果有则吃掉对方的子,否则返回false //System.out.println("向上移动找出是否有自己的棋子,如果有则吃掉对方的子,否则返回false"); //System.out.println("上移的时候行数从大到小"); for (int m = i - 2; m > 0; m--)//上移的时候行数从大到小{ //System.out.println("如果是己方棋子" + m + Chess[m - 1][j].getText()); if (Chess[m][j].getText() == mychess)//如果是己方棋子{ int n = 0; while (n <= i - m - 1) {

//System.out.println("吃掉己方2颗棋子中间的对方棋子"); Chess[i - n - 1][j].setText(mychess);//吃掉己方2颗棋子中间的对方棋子n++; } ChessCheck3 = true; break; } else { ChessCheck3 = false; }//如果不是己方棋子,继续寻找} } //检查下方System.out.println("检查下方"); if (Chess[i + 1][j].getText() != yourchess) { //System.out.println("下方边第一个是我的棋子"); ChessCheck4 = false; } else {//向右移动找出是否有自己的棋子,如果有则吃掉对方的子,否则返回false //System.out.println("向下移动找出是否有自己的棋子,如果有则吃掉对方的子,否则返回false"); for (int m = 1; m < Max - i - 1; m++) { if (Chess[i + 1 + m][j].getText() == mychess)//如果是己方棋子{ //System.out.println("如果是己方棋子"); int n = 1; while (n <= m) { //System.out.println("吃掉己方2颗棋子中间的对方棋子"); Chess[i + n][j].setText(mychess);//吃掉己方2颗棋子中间的对方棋子n++; } ChessCheck4 = true; break; } else { ChessCheck4 = false; }//如果不是己方棋子,继续寻找} } //上面已经完成对水平和垂直方向的检查过程,下面开始是些对角方向的检查//检查右上角System.out.println("检查右上角"); if (Chess[i - 1][j + 1].getText() != yourchess) { //System.out.println("右上角第一个是我的棋子"); ChessCheck5 = false; } else {//向右上移动找出是否有自己的棋子,如果有则吃掉对方的子,否则返回false //System.out.println("向右上移动找出是否有自己的棋子,如果有则吃掉对方的子,否则返回false"); int x = Max - j; int y = i; int m = 1; int tj; if (x > y) { tj = y - 2; } else { tj = x - 2; } while (m <= tj) { //System.out.println("寻找棋子" + m + tj); if (Chess[i - m - 1][j + 1 + m].getText() == mychess)//如果是己方棋子{ //System.out.println("如果是己方棋子" + Chess[i - m - 1][j + 1 + m].getText()); int n = 1; while (n <= m) { //System.out.println("吃掉己方2颗棋子中间的对方棋子"); Chess[i - n][j + n].setText(mychess);//吃掉己方2颗棋子中间的对方棋子n++; } ChessCheck5 = true; break; } else { ChessCheck5 = false; }//如果不是己方棋子,继续寻找m++; } } //右下角System.out.println("检查右下角"); if (Chess[i + 1][j + 1].getText() != yourchess) { //System.out.println("右下角第一个是我的棋子"); ChessCheck6 = false; } else {//向右下移动找出是否有自己的棋子,如果有则

吃掉对方的子,否则返回false //System.out.println("向右下移动找出是否有自己的棋子,如果有则吃掉对方的子,否则返回false"); int m = 1; int tj; if (i > j) { tj = Max - i - 2; } else { tj = Max - j - 2; } while (m <= tj) { //System.out.println("寻找棋子" + m + tj); if (Chess[i + m + 1][j + 1 + m].getText() == mychess)//如果是己方棋子{ //System.out.println("如果是己方棋子" + Chess[i + m + 1][j + 1 + m].getText()); int n = 1; while (n <= m) { //System.out.println("吃掉己方2颗棋子中间的对方棋子"); Chess[i + n][j + n].setText(mychess);//吃掉己方2颗棋子中间的对方棋子n++; } ChessCheck6 = true; break; } else { ChessCheck6 = false; }//如果不是己方棋子,继续寻找m++; }

} //左上角System.out.println("检查左上角"); if (Chess[i - 1][j - 1].getText() != yourchess) { //System.out.println("左上角第一个是我的棋子"); ChessCheck7 = false; } else {//向左上移动找出是否有自己的棋子,如果有则吃掉对方的子,否则返回false //System.out.println("向左上移动找出是否有自己的棋子,如果有则吃掉对方的子,否则返回false"); int m = 1; int tj; if (i > j) { tj = j - 1; } else { tj = i - 1; } while (m <= tj) { //System.out.println("寻找棋子" + m + tj); if (Chess[i - m - 1][j - 1 - m].getText() == mychess)//如果是己方棋子{ //System.out.println("如果是己方棋子" + Chess[i - m - 1][j - 1 - m].getText()); int n = 1; while (n <= m) { //System.out.println("吃掉己方2颗棋子中间的对方棋子"); Chess[i - n][j - n].setText(mychess);//吃掉己方2颗棋子中间的对方棋子n++; } ChessCheck7 = true; break; } else { ChessCheck7 = false; }//如果不是己方棋子,继续寻找m++; } } //左下角System.out.println("检查左下角"); if (Chess[i + 1][j - 1].getText() != yourchess) { //System.out.println("左下角第一个是我的棋子"); ChessCheck8 = false; } else {//向左下移动找出是否有自己的棋子,如果有则吃掉对方的子,否则返回false //System.out.println("向左下移动找出是否有自己的棋子,如果有则吃掉对方的子,否则返回false"); int x = j; int y = Max - i; int m = 1; int tj; if (x > y) { tj = y - 2; } else { tj = x - 2; } while (m <= tj) { //System.out.println("寻找棋子" + m + tj); if (Chess[i + m + 1][j - 1 - m].getText() == mychess)//如果是己方棋子{ //System.out.println("如果是己方棋子" + Chess[i + m + 1][j - 1 - m].getText()); int n = 1; while (n <= m) { //System.out.println("吃掉己方2颗棋子中间的对方棋子"); Chess[i + n][j - n].setText(mychess);//吃掉己方2颗棋子中间的对方棋子n++; } ChessCheck8 = true; break; } else { ChessCheck8 = false; }//如果不是己方棋子,继续寻找m++; } } //当前方是否落子/* System.out.println("当前方是否落子1" + ChessCheck1 + "2" + ChessCheck2 + "3" + ChessCheck3 + "4" + ChessCheck4 + "5" + ChessCheck5 + "6" + ChessCheck6 + "7" + ChessCheck7 + "8" + ChessCheck8); */ //如果8个方向返回的都是false,即都不能落子,则返回false if (ChessCheck1 == true || ChessCheck2 == true || ChessCheck3 == true || ChessCheck4 == true || ChessCheck5 == true || ChessCheck6 == true || ChessCheck7 == true || ChessCheck8 == true) { ChessCheck = true; } else { ChessCheck = false; } return; // } //裁判模块//通过计算棋盘上的双方棋子的数量判断胜负public void WhoWin() { int p = 0, q = 0; for (int m = 1; m < Max - 1; m++) { for (int n = 1; n < Max - 1; n++) { if (Chess[m][n].getText() == "●") { p = p + 1; } if (Chess[m][n].getText() == "○") { q = q + 1; } } } //将int型转换成字符型并设置显示Chess[0][1].setText(String.valueOf(p) ); Chess[0][Max - 1].setText(String.valueOf(q)); } } //

面板重置//将棋盘面板清空class Reset { public Reset() { for (int X = 1; X < Max - 1; X++) { for(int Y=1;Y

本文来自原创论文(https://www.sodocs.net/doc/1017471187.html,),转载请注明出处:https://www.sodocs.net/doc/1017471187.html,/SheJiBaoGao/21859.html

黑白棋游戏设计1[1]

VC程序设计课程设计 报告书 设计题目:黑白棋游戏设计 院系: 班级: 组别: 学号: 姓名: 起止日期: 指导教师:

目录 前言 (1) 1. 课程设计计划 (2) 2.需求分析 (3) 3.概要设计 (4) 4.详细设计 (5) 5.编码与测试 (13) 6.心得体会 (15) 参考文献 (16)

前言 黑白棋,也称反棋(Reversi)、奥赛罗棋(Othello),苹果棋,翻转棋。游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。它的游戏规则简单,因此上手很容易,但是它的变化又非常复杂。 起初,黑白棋在西方和日本很流行,近年来,黑白棋正逐步为中国玩家所接受,并深受喜爱。 本次我们组选择这个题目做大作业,一方面是巩固和提高以前所学的VC++的知识;另一方面是因为这可能是我们中的大多数人第一次完成一个软件的系统设计,选择一个中等难度且相对成熟的软件来设计既易于实现又留有一定的上升空间,符合我们的实际情况。 我们所设计的这种黑白棋游戏有几个特点:程序短小精悍,简洁明了;游戏界面美观,容易操作;功能丰富,趣味性强。

1. 课程设计计划 黑白棋游戏设计所完成的就是一个游戏软件系统。其一般的功能包括:开始新局,对弈方式选择,先手选择,棋力设置,限时设置,计算机演示,保存棋局,载入棋局,导出走棋信息,重温棋局,英雄榜,悔棋,设置属性,帮助信息,关于黑白棋的介绍等,要求设计一个黑白棋游戏软件,通过计算机实现各个功能。其具体设计要求为: 1、位图的导入和棋盘的生成 2、记录双方对弈时间的计时器与记录双方子数的计数器 3、选择人机对战与人人对战的函数及控制堆栈难度的主函数 4、实现悔棋功能的堆栈 我们对项目期望能实现 a 可以实现人机对弈。 b 棋力可调,分初级,中级,高级。 c 提示音功能,下错、下对有不同的提示音。 d 玩家遇到疑问,需要帮助时,给予一定的帮助 e 界面色彩友好,给人以良好的视觉冲击。 f 操作方便,容易上手。 本课程设计工作进度计划为: 表1 课程设计计划 本课程设计任务的分工:陈涛涛完成人机对战中的实现保存棋局、载入棋局、重温棋局、英雄榜、悔棋功能。本人完成人机对战中的实现开始,退出,帮助,难度设计,播放背景音乐功能。

黑白棋游戏课程设计

黑白棋程序源代码: #include "graphics.h" #include "stdio.h" #include "stdlib.h" #include "conio.h" #include "dos.h" #include "math.h" #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 #define ESC 0x011b #define ENTER 0x1c0d #define F1 0x3b00 #define F2 0x3c00 #define F3 0x3d00 #define F4 0x3e00 int a[8][8]={0},key,score1,score2;/*具体分数以及按键与存放棋子的变量*/ char playone[3],playtwo[3];/*两个人的得分转换成字符串输出*/ void playtoplay(void);/*人人对战函数*/ void DrawQp1(void); void DrawQp2(void); void DrawQp(void);/*画棋盘函数*/ void SetPlayColor(int x);/*设置棋子第一次的颜色*/ void MoveColor(int x,int y);/*恢复原来棋盘状态*/ int QpChange(int x,int y,int z);/*判断棋盘的变化*/ void DoScore(void);/*处理分数*/ void PrintScore(int n);/*输出成绩*/

浅谈:如何写一份好简历

浅谈:如何写一份好简历 浅谈:如何写一份好简历 需要声明的是我帮不了太多人,只有那些对计算机科学真的有点兴趣的人可能觉得我说的有点用。这里写的东西仅仅是我们的观点,不代表别的公司也这么做或者应该这么做。 * 没有必要撒谎 写简历最差的策略就是撒谎了。这种欺骗本身就自相矛盾。你到底希望和聪明人共事呢,还是笨人呢?大多数人希望和聪明人共事,但是聪明人你骗得了么, 或者说被你骗了的算是你认为的聪明人么?你要和想找好工作,基本假设就是大家都是明白人不好骗的。看简历的人也上过学,也写过简历,更清楚其中的注水手段,以为自己能吹牛过关,大部分都是自取其辱。即便你过了简历筛选一关,也没那么容易,面试时候肯定会问你那些你写的东西,你答不上来,面试官还会觉得你人品有问题。有的同学说多参加几次面试不好么,好,但不能用这种方式,这完全就是自毁前程。 * 看你简历的那个人 某种程度上他在暗你在明,他了解的信息更多,信息非常不对称,应聘者处于劣势。他可以看到很多很多类似的简历,他会有一种“高频词麻木”的特征。你 和别人都一样显然不能引起他的兴趣。而且看你简历的人,比如说我,都会有种自我膨大的感觉,喜欢寻找当年的自己,希望发现充满乐趣,积极向上的人。这实 际上是看简历的人的一种自恋的想法,觉得自己当年如何如何,其实就像我当年也是一塌糊涂,但也会觉得自己当年伟光正。所以表现出来乐观积极是非常讨喜的。一篇充斥着无数“高频词”的简历,显然不能传达这种信息。 * 陈述事实 我觉得平白陈述就好了,不要有个人色彩。你觉得是精通,我可能觉得就是了解;你觉得是掌握,我可能觉得就是清楚概念。所以不要有这类词汇。你写“用Ruby写了自己的个人站点”这个没有什么可以辩驳的,也非常好证实。是不是你 写的,怎么写的,遇到什么困难都能很容易知道。“用C写了数独解算器”就很 平实,我知道你做了什么,会做什么。“读了SICP”,“做了50道《算法导论》 的习题”,“看了nginx的一部分源代码”,“自己写了wc”都比“精通”, “掌握”之类的强多了。陈述就可以了,不要描绘。 * 你的作品 我因为简历的一句话面试了好多同学。有个同学写“用C++实现了Python解 释器”,这个事情我做不到,所以我特别想找他来聊一聊,教教我编译原理的事情。很多计算机系的同学都学过《编译原理》,但绝大部分人什么也没写过。所以只要有这点,我就觉得他是个很特别的人,我很喜欢。有个同学写“在spoj 有积

C++实现黑白棋

黑白棋规则介绍 黑白棋是由黑方和白方两人进行的益智游戏。棋盘为N×N方格,黑白棋总共使用N2个棋子,每个棋子分正反两面,分别是黑色和白色。轮到一方下棋时,必须把棋下在与对方棋子相邻的空位上,要求所下的棋子和原有的已方棋子夹住对方的至少一个棋子(横竖斜夹均可),然后把被夹住的子变成己方的颜色(也叫吃子)。下棋过程中,任何棋子既不会从棋盘上拿走,也不会从一个格子移到另一个格子,吃子时,不会发生连锁反应,吃进的棋子不能再夹吃其他的子。当双方都无棋可下,或者方格全部占满后,棋局结束,子多的一方为胜方。 黑白棋人工智能的实现 我们这里取棋盘大小为10×10个方格,用数组int state[10][10]来表示棋盘的状态,其中0表示方格为空,-1表示用黑方的棋,1表示白方的棋。 在10×10的棋盘上,除了那些已经有子的地方不能走子外,那些不能吃子的点也不能走。如何判断某个点(x, y)能不能走子呢?通过分析黑白棋的规则我们知道,在这一个方格上的八个方向的任何一个方向上只要满足:在这个方向与之相邻的有连续若干个对方的棋子,接着有一个己方的子,我们就可以肯定这一点能够走子。所以我定义了一个数组int dirstate[8](数组从右逆时针开始,如dirstate[0]表示右,dirstate[1]表示右上,以此类推)来表示个方向的状态,值1表示在这个方向上可以吃掉对方的子,值0则表示不能,同时定义一个函数movedir(int x,int y,int mover)来判断各方向的状态,函数movedir的具体实现见源代码,这里以右方向为例说明,其他各个方向类似,右方向的判断可以用以下语句实现: int tx=x+1,ty=y,step=0;//tx,ty分别用来表示右方向各点在数组中的索引 dirstate[0]=0;//初始化为不能吃子 while(1) { if(tx>9) break;//处于边界,退出循环,该方向不能吃子 if(state[ty][tx]==0) break; //空子,退出循环,该方向不能吃子

黑白棋课程设计

攀枝花学院课程设计 题目:黑白棋游戏 院(系):数学与计算机学院 年级专业: 2014级软件工程 姓名:田坤林 学号: 201410804095 指导教师:陈斌 二〇一五年一月十日 攀枝花学院教务处制

攀枝花学院本科学生课程设计任务书

课程设计(论文)指导教师成绩评定表

摘要 黑白棋,又叫反棋(Reversi)、奥赛罗棋(Othello)、苹果棋或翻转棋。黑白棋在西方和日本很流行。游戏通过相互翻转对方的棋子,最后以棋盘上谁 的棋子多来判断胜负。 棋子:黑白棋棋子每颗由黑白两色组成,一面白,一面黑,共64个(包括棋盘中央的4个)。棋子呈圆饼形。 棋盘:黑白棋棋盘由64格的正方格组成,游戏进行时棋子要下在格内。棋盘可分为“角”、“边”以及黑白棋“中腹”。现今的棋盘多以8x8较为普遍。 棋钟:正式的比赛中可以使用棋钟对选手的时间进行限制。非正式的对局 中一般不使用棋钟。 黑白棋的棋盘是一个有8*8方格的棋盘。下棋时将棋下在空格中间,而不 是像围棋一样下在交叉点上。开始时在棋盘正中有两白两黑四个棋子交叉放置,黑棋总是先下子。 下子的方法把自己颜色的棋子放在棋盘的空格上,而当自己放下的棋子在横、竖、斜八个方向内有一个自己的棋子,则被夹在中间的全部翻转会成为自 己的棋子。 并且,只有在可以翻转棋子的地方才可以下子。 如果玩家在棋盘上没有地方可以下子,则该玩家对手可以连下。双方都没 有棋子可以下时棋局结束,以棋子数目来计算胜负,棋子多的一方获胜。在棋 盘还没有下满时,如果一方的棋子已经被对方吃光,则棋局也结束。将对手棋 子吃光的一方获胜。 每个“翻转棋”游戏开始时,棋盘上已经交叉放好了四颗棋子。其中两颗 是黑棋,另两颗是白棋。黑棋总是先走。 当您的棋子在某一直线方向包围了对手的棋子时,就可以翻转这些棋子的 颜色,使它们成为您方的颜色。例如,如果您执黑棋,并且看到在一排白棋的

传统五子棋游戏的设计_课程设计报告

2016-2017学年第一学期 《Windows程序设计》 课程设计报告 题目:传统五子棋游戏的设计 专业: 班级: 姓名: 指导教师: 成绩: 学院 二0一六年十月十五日

目录 1 引言 (1) 1.1五子棋介绍 (1) 1.2游戏设计意义 (1) 2 游戏设计部分 (1) 2.1 设计目的 (1) 2.2 需求分析 (1) 2.3软件架构 (1) 2.4五子棋设计说明 (2) 2.4.1主要成员变量 (2) 2.4.2回溯栈元素类——StackElement (3) 2.4.3棋子点属性类——qzdianshuxing (3) 3 游戏模块的实现与调试 (3) 3.1主要成员函数 (3) 3.2以下函数是实现人机对弈的主要函数: (6) 3.3输赢的判断 (13) 3.4 以下是实现菜单功能的函数: (13) 3.5 实现工具栏上的功能函数 (17) 4 总结: (21) 5 参考文献: (22)

1 引言 1.1五子棋介绍 五子棋是起源于中国古代的传统黑白棋种之一。它不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。它是中西文化的交流点,是古今哲理的结晶。 1.2游戏设计意义 本次五子棋游戏设计是为了检验自己对于C#编程语言的了解深度。从简单的游戏程序入手,独自进行一个小软件程序的开发,让各个运行模块的环环相扣,这不仅对自己的编程能力有了颇具意义的提升,也对今后软件开发有了更实际的认识,增长了相关的工作经验。这也算是步入工作岗位后对自己的一次重要试炼。 2 设计部分 2.1 设计目的 1、利用.net语言及vs软件实现传统五子棋游戏的再现; 2、实现先、后手,悔棋,换方的经典功能,可以进行人机,人人对战; 3、增加游戏音效,并可开启与关闭; 4、主要采用windows窗体的主界面使游戏较为美观。 2.2 设计要求 1、用鼠标点击的方式在棋盘上摆放棋子 2、玩家以决定谁执黑子,黑子先落子,黑白子交替,无论是水平方向、竖直方向还是对角线方向都可以,任意一方将五子连在一起的时候判为胜利,棋盘满为和棋,对方实现胜利条件则自己判负。 3、可以悔棋、设置音效、对换双方棋子 4、界面友好、漂亮。 2.3 软件架构 根据设计的需求在系统中添加如下设计框架,如图设计框架总括。其中包括总页面,游戏控制和游戏模式,设计能达到对于本游戏的基本的操作包括重新开

c语言程序黑白棋设计流程

引言 黑白棋的简要历史: 黑白棋,又叫反棋(Reversi)、奥赛罗棋(Othello),苹果棋,翻转棋。黑白棋起源中世纪的英国,18世纪传入日本,并在日本得到了发展。现在,黑白棋在西方和日本很流行。游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。 它的游戏规则简单,因此上手很容易,但是它的变化又非常复杂。有一种说法是:只需要几分钟学会它,却需要一生的时间去精通它。 “黑白棋规则”: 1)两人对奕,以轮流方式持黑子与白子。 2)开辟新局者持白子,加入者持黑子,之后以轮流方式将棋子置于棋盘格子中。若无地方可下子,则跳过一回,由对方下子。 3)在提示的格子中,选择一个格子下子,当下子的位置与离最近的同色旗子中,若有其他棋子则中间的棋子变为与我方一样颜色。 4)当下满64个棋子,棋子多者为胜。 关于C语言: C语言是一种结构化设计语言,它兼顾有高级语言的特点和低级语言的功能。其设计功能十分强大,既可用于编写应用软件,又可用于设计制作系统软件。同时,C语言是一种较为通用的编程软件,在目前的软件行业中使用也是十分的广泛。 虽然C语言是面向DOS编程的,但它是计算机的底层编程工具之一。由C语言编写的程序,它的代码质量和运行速度仅次于汇编语言编写的程序,C语言具有简单易学和可移植性好等特点,同时又具有汇编语言的特点,具有较强的生命力和广泛的应用前景。 第一章系统分析 1、1 可行性分析 科技的飞速发展,将人类带入了信息时代,计算机越来越贴近人的生活,速度成为人们成功的前提条件,以致于人们必须不断尝试着使用各种手段来提高自身的工作效率,其手段之一就是对键盘的充分利用和相应游戏软件的开发.智能型的游戏越来越深受广大游戏爱好者的喜欢.方便而快捷. 黑白棋的游戏是要在一个8*8的网格中进行,而数组属于构造体类型,数组是具有相同数据类型的变量序列,序列中的每个变量成为元素,数组元素由一个统一标识的数组名和顺序好“下标”来表示。顾需要在游戏中定义一个二维数从而实现游戏的走棋、落棋、判断棋盘的变化等。

黑白棋程序设计

课程设计任务书

摘要 程序设计语言类课程的指导思想是:使学生通过学习即高级编程语言的知识、编程技术和基本算法,又掌握程序设计的思想和方法,更具备利用计算机求解实际问题的能力,能灵活运用高级语言进行程序设计[6]。 其实认真学习一门语言并不困难,关键要所追求的学习的方法和途径。一条好的途径便于快速掌握,熟悉运用语言。学习的目的在于应用,理论来源于实践,如果在学习中能够通过有效的途径如自己动手设计一个功能比较前大的开发系统,借鉴于各种工具书,善于总结。定可以很好的效果。正是如此,使我们在这几年中对语言学习有了很大提高。通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。 关键词: 掌握编程语言的知识;编程技术;基本算法思想和方法

目录 黑白棋4 (4) 2.1.用到的函数: (4) 2.1.1main()主函数: (4) 2.1.2DrawQp()画棋盘函数: (4) 2.1.3MoveColor()恢复原来格子的状态 (4) 2.1.4playtoplay()人人对战函数 (4) 2.1.5QpChange()判断棋盘变化 (4) 2.1.6PrintScore()输出成绩 (5) 2.2.子函数功能一览表 (5) 2.3. 主函数流程图 (6) 2.3.1棋盘绘制流程图 (6) 2.4.函数解析 (7) 2.4.1图形库文件 (7) 2.4.2图形初始化函数 (7) 2.4.3设置背景颜色 (7) 2.4.4画线 (7) 2.4.5设置填充模式和颜色 (7) 2.4.6方向操作 (7) 2.4.7落棋位置判断 (8) 2.4.8判断棋盘的变化和改变棋子的颜色 (8) 2.4.9 成绩输出 (8) 2.4.10输出成绩 (8) 2.4.11输出最后的胜利者结果 (8) 2.5.源代码 9 2.6运行结果17 2.7心得体会17 参考文献 (18)

UML五子棋设计

单机版五子棋 UML设计 郑州大学信息工程学院

1.需求分析 1.1项目背景 五子棋是一种两人对弈的纯策略型汉族棋类益智游戏,棋具与围棋通用,由中国汉族人发明,起源于中国上古时代的传统黑白棋种之一。主要流行于华人和汉字文化圈的国家以及欧美一些地区。规则为双方交替落子,直到有一方下出五子连续,五子连珠为赢。容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。 1.2项目技术支撑 使用UML语言进行需求分析设计;在Visual Studio 2010集成开发环境下用C++语言及.NET架构编写软件。 1.2.1 UML简介 Unified Modeling Language (UML)又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。面向对象的分析与设计(OOA&D,OOAD)方法的发展在80年代末至90年代中出现了一个高潮,UML是这个高潮的产物。它不仅统一了Booch、Rumbaugh 和Jacobson的表示方法,而且对其作了进一步的发展,并最终统一为大众所接受的标准建模语言。 Grady Booch的描述对象集合和它们之间的关系的方法。James Rumbaugh的对象建模技术(OMT)。Ivar Jacobson的包括用例方法的方式。还有其他一些想法也对UML起到了作用,UML是Booch, Rumbaugh, Jacobson。UML已经被对象管理组织(OMG)接受为标准,这个组织还制定了通用对象请求代理体系结构(CORBA),是分布式对象编程行业的领头羊。计算机辅助软件工程(CASE)产品的供应商也支持UML,并且它基本上已经被所有的软件开发产品制造商所认可,这其中包括IBM和微软(用于它的VB环境)。 UML规范用来描述建模的概念有,类(对象的)、对象、关联、职责、行为、接口、用例、包、顺序、协作,以及状态。 1.2.2 C++简介 C++是一种安全的、稳定的、简单的、优雅的,面向对象的编程语言。它在继

棋子颜色问题

棋子颜色问题 一摘要: 二问题的重述及分析: 1. 问题重述: 任取m枚黑白两色的棋子,任意摆成一个圈;在两个颜色相同的棋子中间插入一枚黑色棋子,在两个颜色不同的棋子中间插入一枚白色棋子,然后去掉原来的棋子,新棋子仍构成一个圈;继续如此下去,如果经过n次这样的操作后,棋子颜色如何变化。 2. 分析: 要将m个黑白不确定的棋子排成一个圈,并根据题目的要求在相同颜色棋子之间放入黑色的棋子,不同颜色棋子之间插入白色的棋子,即黑黑为黑,白白为黑,黑白为白,白黑为白。 要将这个实际问题转化为数学问题可以把黑白两色的棋子分别设为两个相关的数字,并使这两个数在运算关系中符合题目的要求,通过计算得出数字之间的关系,假设黑棋子为1,白棋子为-1则11?=1,(-1)1 ?)=1, 1?(-1)=-1, (-1)?1=-1.那么本题的问题就巧妙的和 (- 数学知识联系上了,因此本题就转换成一个数学问题。 三符号说明: Q : 每行的元素个数。 E :每行元素的指数。

四 模型假设: 1.分别设黑棋为1,白棋为-1。 2.相同颜色之间插入黑棋,即转化为:1x1=1或(-1)x (-1)=1。 3. 相异颜色之间插入白棋,即转化为:1x (-1)=-1或(-1)x1=-1。 4. 至少三个棋子围成一圈。 5. 给出的任意m 枚棋子依次编号为1~m 。 五 模型的建立与求解: 2123?? 2 231?? ⑴ 假设有三个棋子给它分别编号为1,2,3构成一个圈。插入两颗棋子之间的棋子颜色由这两颗棋子共同决定。 1 2 3 1×2 2×3 3×1 1×22?3 2?23?1 3?21?2 1?32?33?1 2?33?31?2 3?3321??3 1464132????2 2????464213 3 3????464321 1 1?????5101052132 3 2?????5101053213 1 3?????5101051321 2

C++ 编写 黑白棋 源代码 适合初学者

C++编写黑白棋 本人写的黑白棋是在控制台上面可以玩的输入时仅需要输入两个字母表示下棋的行与列,比如下在一行二列,只需要输入ab即可。如果需要五子棋的,可以搜索本人的《C语言编写五子棋》《C++编写五子棋》。 /******************************************************************** created: 2012/03/12 created: 12:3:2012 17:18 filename: e:\Visual Studio 2005\Projects\othello\othello\othello.cpp file path: e:\Visual Studio 2005\Projects\othello\othello file base: othello file ext: cpp author: terranlong ********************************************************************* / #include using namespace std; class Othello { public: Othello() { init(); } void init(); void print(); bool legalwithpostion(int x, int y, int xoffset, int yoffset, int legal); bool illegal(int x, int y); void reversal(int x, int y); bool skip(); void input(); bool gameover(); private: const static int chessboard_size = 8; char chessboard[chessboard_size][chessboard_size]; int count; int playerid;

基于ARM的黑白棋游戏

基于ARM的黑白棋游戏(项目计划书) 2010-3-25

1引言 (3) 1.1编写目的 (3) 1.2背景 (3) 1.3参考资料 (3) 2项目概述 (3) 2.1工作内容以及需要解决的问题 (3) 2.2主要参加人员 (4) 2.3产品 (4) 2.3.1程序 (4) 2.3.2文件及软硬件环境 (4) 2.3.3非移交的产品 (5) 2.4验收标准 (5) 2.5完成项目的最迟期限 (5) 3实施计划 (5) 3.1工作任务的分解与人员分工 (5) 3.2进度 (6) 3.3预算 (6) 3.4关键问题 (6) 4支持条件 (6) 5可行性分析以及建议 (6)

1引言 1.1编写目的 编写这份项目计划书的目的是提出项目进行的合理安排,给出进度,分析需求以及采取哪些方案,并和小组成员讨论其可行性,预测可能遇到的难题,给各小组成员详细分工,在有限的期限内完成项目的开发。 1.2 背景 随着消费类电子产业的蓬勃发展,越来越多的嵌入式电子产品走进了千家万户。各式各样的嵌入式系统出现在了众多的行业和应用中,其中ARM和Linux结合的产品在市场上最受青睐。本课题的黑白棋游戏设计就是基于ARM和1inux平台的。 本程序使用面向对象的QT库的C++语言,开发于可以运行于ARM-Linux环境下的游戏程序。人机对弈,无限悔棋等功能,其中人机对弈包含难度选择和先后手选择。 1.3参考资料 [1] Mat Buckland.Ai Techniques For Game Programming[M].Premier Press.2002. [2] 张海藩.软件工程导论(第四版)[M]. 北京:清华大学出版社2003-12. [3] 张宏林.数字图像分析与处理技术[M].北京:人民邮电出版社2003-2. [4] 棋类游戏的智能模块设计――浅谈人工智能[J].2004-09. 2项目概述 2.1工作内容及需要解决的问题 主要工作: (1)内核的移植 (2)QT的移植 (3)算法体系结构设计 (4)QT编程 (5)硬件底层驱动 需要解决的问题: (1)linux内核版本的选定,由于开发板硬件的限制,尽量内核较小的ARM—Linux 内核。 (2)所选QT版本不能太低,因为较低的QT版本可能没有我们编译时所需要的库文

黑白棋代码

#include #include #include #include #define NONE 0 #define BLACK 1 #define WHITE 2 #define DUMMY 3 #define f(x,y) (x)*9+y void draw(); void MoveGenerator(int deep);//* int getnum(); void turn(int deep,int num);//* void back(int deep);//* int AI(); void help(); int check(int num); int CheckWay(int num); int SetLevel(); void EndGenerator(int deep); int HappyEnding(int deep); int BadEnding(int deep,int alpha,int beta); int Ending(int deep,int alpha,int beta); int search(int deep); int AlphaBeta(int deep,int alpha,int beta); int PVS(int deep,int alpha,int beta); int MAX_DEPTH=10; int END_DEPTH=14; int colour=BLACK; int computer=WHITE; int black=2,white=2; int note; char board[91]={

黑白棋游戏报告

《高级语言程序设计》 课程设计报告 题目:黑白棋游戏 专业: 班级: 姓名: 指导教师: 成绩:

目录 1设计目的及要求 (3) 1.1黑白棋简介 (3) 1.2设计目的 (3) 1.3设计要求 (4) 1.4课题分析 (4) 2设计内容 (4) 2.1设计思路 (4) 2.2程序设计流程图 (5) 3程序测试 (9) 4总结 (11) 5参考文献 (11) 6程序代码 (12)

1设计目的及要求 1.1黑白棋简介 黑白棋,又叫反棋(Reversi)、奥赛罗棋(Othello),苹果棋,翻转棋。黑白棋的棋子和围棋类似。但它的下法与围棋的很不相同。黑白棋是由黑方和白方两人进行的益智游戏。棋盘为N×N方格,黑白棋总共使用N2个棋子,每个棋子分正反两面,分别是黑色和白色。轮到一方下棋时,必须把棋下在与对方棋子相邻的空位上,要求所下的棋子和原有的已方棋子夹住对方的至少一个棋子(横竖斜夹均可),然后把被夹住的子变成己方的颜色(也叫吃子)。下棋过程中,任何棋子既不会从棋盘上拿走,也不会从一个格子移到另一个格子,吃子时,不会发生连锁反应,吃进的棋子不能再夹吃其他的子。当双方都无棋可下,或者方格全部占满后,棋局结束,子多的一方为胜方。 1.2设计目的 本课程设计是计算机软件技术基础重要的实践性环节之一,是在学生学习完《程序设计语言(C)》课程后进行的一次全面的综合练习。本课程设计的目的和任务: (1)巩固和加深学生对C语言课程的基本知识的理解和掌握; (2)掌握C语言编程和程序调试的基本技能; (3)利用C语言进行基本的软件设计,掌握软件设计一般方法,了解软件设计的思路; (4)掌握书写程序设计报告的能力; (5)提高运用C语言解决实际问题的能力; 这个程序也是对编程基本功的一个训练,对于初学C语言的人,讲分支、循环、数组函数综合应用,而不仅限于编制独立的小程序,能够大大提高变成水平。

JAVA课程设计黑白棋源代码

JAVA课程设计黑白棋源代码|java课程设计|数据库课程设计|计算机课程设 计|精品课程网站设计 import java.awt.*;import javax.swing.*;import java.awt.event.*;//建立一个大框架用来放置棋盘面板class Game extends JFrame{ int Max;//定义的棋盘大小为Max × Max的正方形 boolean ChessCheck = false;//定义一个变量,用来设置棋子是否能下在所在位置 boolean IamFirst = true;//定义一个变量,用来判断轮到谁下棋,黑棋为true白棋为false JPanel mainPanel;//定义主面板 Object[] options ={ "确定" };//警告框按钮 String msg;//警告框信息 public Game() { super("黑白棋(二人对战)");//窗口标题 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//默认窗口关闭按 钮 setLocation(200, 200); //设置组件位置X,Y坐标 Image frame_icon = Toolkit.getDefaultToolkit().createImage(getClass().getResource("image \\bw.jpg"));//定义图标文件 setIconImage(frame_icon);//设置窗口图 标 setVisible(true); mainPanel = new JPanel(); getContentPane().add(mainPanel); }} //起始设置窗口//该窗口包含2个Label显示,其中一个为作者信息显示//另一个为输入提示,文本框用来输入棋盘大小//开始游戏按钮用来检查输入内容是否合法,若合法则进入游戏class Start extends JFrame{ Object[] options ={ "确定" }; String msg; JPanel S_panel; JLabel Msg; JLabel PMax; JTextField TMax; JButton GameStart; GameEvent bEGame; BorderLayout SLayout; public Start() { super("黑白棋(二人对战)选择难度! "); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocation(200, 200); //设置组件位置X,Y坐标 setSize(400, 100); S_panel=new JPanel() ; Msg = new JLabel("程序制作:杜世 忠 Email:dushizhong@https://www.sodocs.net/doc/1017471187.html,"); PMax = new JLabel("选择方格。建议选择16以内,即16×16以下。必须为偶数。"); TMax = new JTextField("10"); GameStart=new JButton("开始游戏") ; bEGame = new GameEvent(); GameStart.addActionListener(bEGame); SLayout=new BorderLayout(2,2) ; getContentPane().add(S_panel); S_panel.setLayou t(SLayout); S_panel.add("North",Msg); S_panel.add("West",PMax ); S _panel.add("Center", TMax); S_panel.add("South", GameStart); setVisible(true); setResizable(false); System.out.prin tln("面板加载完成"); } //事件监听类,处理按钮事件 class GameEvent implements ActionListener { public void actionPerformed(ActionEvent Ge) { System.out.println("进入监听"); Object Gobj = Ge.getSource(); if (Gobj == GameStart) { System.out.println("开始处理"); try{ //将输入的文本转换为int型,若输入不是数字则抛出异常 int num= Integer.parseInt(TMax.getText()); if ((num % 2) == 0)//判断是否是偶数 { if (num < 8)//判断输入是否大于等于 8 { PMax.setText("你输入了非法字符!必须输入大于等于8的偶数!"); //警告窗口 msg = new String("你输入了非法字符!必须输入大于等于8的偶数!"); JOptionPane.showOptionDialog(null,

设计文档-黑白棋

黑白棋游戏的开发与设计 一、需求分析 1.功能需求 黑白棋游戏通常是黑白两个面,一方执白,一方执黑。每次在棋盘上走一个棋子,无论横竖线或斜线均可,只要两个同样颜色的将另一个颜色的夹在中间了,就可以将这个颜色翻过来,例如两个白子包住一排黑子就可以把这些黑子变成白子,通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。它的游戏规则简单,因此上手很容易,但是它的变化又非常复杂。 2.非功能需求 (1)界面友好,图形界面,游戏开始前有游戏的简单使用说明,方便玩家使用; (2)具有较好的容错能力,玩家在游戏过程中,除了规定的按键外,其他按键均忽略,不予处理; (3)发布游戏时,将图形驱动加载到程序中,使系统具有良好的可扩展性和平台适应性,可在任何PC机上运行。 二、系统设计 1.设计思路 从已知的黑白棋游戏中可知,应该用二维数组表示程序的数据,数组两个下标可以表示棋盘上的位置,数组元素的值代表棋格中的状态,共有三种情况,分别是空格、黑棋和白棋,这样给数组元素的取值设定为0、1、2。其中0代表空格,1代表白色棋子,2代表黑色棋子。这样程序的主要工作是接收棋手按键操作,一旦接收到回车键,说明棋手摆子,先判定是不是有效位置,也就是能不能包围住对方棋子,如果能,便对棋子所在的位置往上下、左右、左上、左下、右上、右下8个方向寻找被包围住的所有棋子(必须是连续的,中间不能有空格),将这些被包围住的对方棋子都变成自己的棋子,然后对当前棋盘中的黑白棋个数进行统计并输出结果。如果没有这样的位置可以落子,则停步,让对方走棋,重复上述步骤,直到游戏结束。如果想提前终止游戏可以按Esc键。

2.结构设计 棋盘状态用数组a[8][8]初值为0表示空格。函数的实体比较简单,因为要输出图形,所以应初始化图形系统,图形工作方式正确确定后,画出棋盘,调用playtoplay()人人对弈函数开始游戏。一旦游戏结束后,关闭图形系统,程序结束。 (1)main()主函数: 按照语法规则,首先定义使用到的常数、全局变量、函数原型说明。棋盘状态用数组a[8][8],初值为0,表示空格。函数的实体比较简单,因为要输出图形,所以应初始化图形系统,图形工作方式正确确定后,画出棋盘,调用playtoplay()人人对弈函数开始游戏,一旦游戏结束后,关闭图形系统,程序结束。 (2)DrawQp()画棋盘函数: 背景颜色设为蓝色,从坐标(100,100)开始每隔40个单位用白色画一条水平直线,一条垂直线,构成棋盘,用循环语句实现。画线函数line()的参数为线的起点和终点坐标,注意要计算正确。函数setfillstyle()可以设置填充模式和填充颜色,fillellipse(int x,int y,int xradius,int yradius)以x 和y为圆心,xradius和yradius为水平和垂直轴画一填充椭圆,当xradius和yradius相等时,则画出的是圆,用它表示棋子。 (3)SetPlayColor()设置棋子的颜色: 因为是两个棋手,同时棋盘也在不断变化,所以要判断棋手和棋盘变化设置了这个函数,函数的参数为整型变量t,根据t的值来设计填充棋子的当前颜色,值为1代表白棋,值为2代表黑棋。 (4)MoveColor()恢复原来格子的状态: 由于棋手在走棋的时候,他的棋子总是首先出现在棋盘的左上角,棋手要通过移动光标键走到要落子的位置,在经过的路程上显示当前棋子,就会覆盖原来的棋盘状态。所以,一旦棋子走过后,就应恢复原来的状态,是空格的依然显示空格,是棋子的就显示原来棋子的颜色,因为棋子移动过程并没有改变数组元素的值,所以可以根据数组元素的值判定原来的状态,如果是1,就恢复白色棋子,值是2则恢复黑色棋子,否则恢复蓝色空格。

黑白棋游戏设计

辽宁工业大学 C语言程序设计课程设计(论文) 题目:黑白棋游戏设计 院(系):软件学院 专业班级: 学号: 学生姓名: 指导教师:胡峰 教师职称:讲师 起止时间:至

课程设计(报告)任务及评语

目录 第1章课程设计的目的与要求 ........................................... 错误!未定义书签。 课程设计目的....................................................................................... 错误!未定义书签。 课程设计的实验环境........................................................................... 错误!未定义书签。 课程设计的预备知识........................................................................... 错误!未定义书签。 课程设计要求....................................................................................... 错误!未定义书签。第2章课程设计内容........................................................... 错误!未定义书签。 程序功能介绍......................................................................................... 错误!未定义书签。 程序整体设计说明................................................................................. 错误!未定义书签。 设计思路......................................................................................... 错误!未定义书签。 数据结构设计及用法说明............................................................. 错误!未定义书签。 程序结构(流程图)..................................................................... 错误!未定义书签。 各模块的功能及程序说明............................................................. 错误!未定义书签。 程序结果......................................................................................... 错误!未定义书签。 程序源代码及注释................................................................................. 错误!未定义书签。第3章课程设计总结............................................................. 错误!未定义书签。参考资料 ................................................................................ 错误!未定义书签。

黑白棋课程设计

中南林业科技大学 本科课程设计说明书 学生姓名:杨明学号:20134380 学院:理学院 专业年级: 2013级信息与计算科学 课程: visual c++面向对象与可视化程序设计设计(论文)题目:黑白棋 指导教师:刘晖 2015年11月

中文摘要 黑白棋,也称反棋(Reversi)、奥赛罗棋(Othello),苹果棋,翻转棋是一个经典的策略性游戏。黑白棋是19世纪末英国人发明的。直到上个世纪70年代一个日本人将其发展,借用莎士比亚名剧奥赛罗(Othello)为这个游戏重新命名,也就是现在大家玩的黑白棋。为何借用莎士比亚名剧呢?是因为奥赛罗是莎士比亚一个名剧的男主角。他是一个黑人,妻子是白人,因受小人挑拨,怀疑妻子不忠一直情海翻波,最终亲手把妻子杀死。后来真相大白,奥赛罗懊悔不已,自杀而死。黑白棋就是借用这个黑人白人斗争的故事而命名。 关键词程序设计,MFC,VC++与面向对象,

引言 游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。它的游戏规则简单,因此上手很容易,但是它的变化又非常复杂。起初,黑白棋在西方和日本很流行,近年来,黑白棋正逐步为中国玩家所接受,并深受喜爱。 1、课程设计计划 黑白棋游戏设计所完成的就是一个游戏软件系统。我以前下过黑白棋,对其有一定的了解,但只是一个初级玩家。要完成游戏的设计,首先要对黑白棋进行全面的了解,然后进行需求分析,对软件有一个总体的设计,之后进行详细设计,并对各种细节及可能的问题进行分析,最后进行编码调试。 具体步骤如下: 第一步:查询黑白棋的下棋规则及其历史。 第二步:对于如何赢棋及下棋策略进行一定的了解。 第三步:对于黑白棋游戏软件的功能需求进行全面的分析,其包括:基本功能的需求及拓展空能的需求。 第四步:进行总体的框架设计。 第五步:对于总体设计中的各个子模块,进行详细设计,并对可能出现的问题及难以解决的地方进行标记,同时可查阅相关的资料进行初步解决。 第六步:上机编码调试,对出现的问题有针对性的加以解决。不能自行解决的问题,查询相关资料或询问其他人 以上是总体的课程设计计划,具体的时间或问题的出现与解决以具体情而定。 对于可能出现的问题,如果有提前的预案就更好了。后期的调试阶段可能会出现很多问题,尽量压缩前一、两步的时间,为后期调试预留更多的时间。对后期调试完成后不满意或还希望添加更多功能,可以进行相应的修改。

相关主题