数独游戏教学文案_第1页
数独游戏教学文案_第2页
数独游戏教学文案_第3页
数独游戏教学文案_第4页
数独游戏教学文案_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、此文档收集于网络,如有侵权请联系网站删除数独游戏益智类游戏是一种比较流行的游戏, 其画面都比较简单, 很少有复杂的游戏特效, 但是 通常用到人工智能的算法来控制游戏的难度。 而算法的优化是开发该类游戏的难点。 这类游 戏游戏主要包括棋牌类游戏和智力测试类游戏,例如麻将,扫雷、五子棋、扑克牌等。数独就是益智游戏的一种, 玩法简单单数字的排列方式千变万化, 很多人认为数独是练 头脑的绝佳方式。本章通过讲解数独游戏在 java 平台的设计与实现,使读者了解此类游戏 的开发过程,掌握实用的开发技巧,学会此类游戏的开发。1 游戏的背景及功能概述 本文在整体上对数独游戏进行了简单的介绍, 使读者了解数独游

2、戏的发展, 知道什么是 数独游戏,以及该游戏的玩法。1.1 背景概述数独的前身为“九宫格” ,最早起源于中国。但当时的算法比现在的更为复杂,要求纵 向、横向、斜向上的三数之和等于 15,而不只是数字的不能重复。儒家典籍易经中的 “九宫图”也是来源于此。到了 18 世纪末,瑞士数学家莱昂哈德欧拉又发明了一种叫做“拉丁方块”的游戏, 之后不久,美国的一家数学逻辑游戏杂志开始刊登这类游戏,使此类游戏得到良好的发展, 之后又在日本得到广泛的传播。 2004 年,第一个“数独”游戏被刊登上了英国泰晤士报 的封面,此时开始数独游戏才真正为世界所知晓。由于此类游戏操作简单,不需要特定的语言基础,也不需要进行

3、数字运算且可玩性高、 锻炼思维、 开发大脑, 所以很快风靡全球。 之后由其衍生的游戏也越来越多, 例如杀手数独、 角线数独等。1.2 功能及简介数独游戏的规则很简单, 只需在空格处填入 19 的数字, 并保证每个数字在每个九宫格 内只能出现一次, 且每个数字在每一行、 每一列也只能出现一次, 而一般的游戏过成功是系 统随机生成一个棋局, 然后玩家需在空白处填上相应的数字使其满足游戏规则。 本文设计的 功能如下:菜单一些常用的操作都放在菜单里面。显示时间可以正确显示用户游戏时间。 主界面可以通过键盘来输入19 数字信息。必要提示可以通过按钮的不同颜色提示用户信息。 绿色:表示该格的数字目前没有与

4、任何数字有冲突。 黄色:表示该格的数字于同行、同列或是同九宫格中的数字有冲突。可以通过改变其本 身的数字或者是与其相关各自的数字来消除。粉色:表示该格的数字是题目。 白色:表示该格目前没有数字。 同时也可以提示游戏胜利、用户自定义题目存在矛盾、不是唯一解、 用户自定义题目和游戏存档名称不合法等提示信息。快速开始:可以按照用户设置的难度随机初始化一局有唯一解的游戏。 计时功能:开局的同时开始计时,计算用户玩完一局游戏所用的时间。 重玩:清空所有用户已填数据,重新开始计时。此文档仅供学习和交流此文档收集于网络,如有侵权请联系网站删除智能解题:根据题目计算出答案,填满剩下的空单元格。新建题目:初始化

5、时,所有单元格都是空的,让用户自己填入数字新建题目,并且新建 题目的时候也考虑了数独游戏的数字不能冲突特点, 不能随便填入数字, 也需要确保新建自 定义的题目只有唯一解才能进行保存。保存题目:可以保存用户新建的题目到 puzzle 目录下。 选局:可以打开你保存的题目并开始一局游戏。 设置难度:提供用户选择随机产生题目的难度,分为“容易、标准、困难、骨灰” 。 随机初始化游戏题目时,根据用户选择的难度初始化不同难度的题目。(不同难度的题目, 初始化时给出空格的数量是不一样的, 容易:15个空格, 标准: 30 个空格,困难: 45 个空格,骨灰:在确定只有唯一答案的情况下给出最多的空格) 。保

6、存和导入: 保存游戏的中间结果, 并可导入保存的结果并继续游戏。 (游戏存档在 save 目录下)/ 排行榜功能:设置排行榜。每次游戏成功完成时,若耗时比先前纪录的第三名短,/ 将记录玩家姓名和用时。在游戏完成时会显示排行榜,榜上列出耗时长短列出前三 名玩家(包括名次、姓名、耗时) 。2 总体设计(5) 数 独 游 戏 共 由 7 个 部 分 组 成 , 分 别 是 : MainFrame.java 、 Checker.java 、 Creator.java 、 MyReader.java 、 Saver.java 、Solver.java 、 TimeKeeper.ja va。(1)Main

7、Frame.java 构造方法:构造出主界面,并添加按钮、计时器以及菜单,并且初始化。clear 方法:清空游戏数据。无返回值。ExitListener 内部类:监听“退出游戏”菜单选项,并执行退出游戏。ReplayListener 内部类:监听“重玩”菜单选项,并执行清空用户填入数据,只保 留题目。DifficultyListener 内部类:监听“难度设定”菜单中的所有选项,并在选中难度 前显示,将表示难度的变量设定为相应值。StartListener 内部类: 监听“快速开始” 菜单选项, 调用 clear 方法并调用 Creator 类的 creator 方法产生随机题目, 对菜单选项

8、进行是否可用的设置并开始计时。 设定需要进 行胜利判定。SaveListener 内部类: 监听“保存题目”菜单选项,调用 Checker 类的 checkCustom 方法对自定义题目进行检查和保存。SaveInGameListener 内部类:监听“即时存档”菜单选项,调用Saver 类中的 save方法进行游戏进度的保存。LoadListener 内部类:监听“载入题目并开局”菜单选项,调用clear 方法并调用MyReader 类中的 read 方法读取先前保存的自定义题目, 对菜单选项进行是否可用的设置并 开始计时。设定需要进行胜利判定。LoadInGameListener 内部类:

9、监听“载入先前存档并开局”菜单选项,调用 clear 方法并调用 MyReader 类中的 read 方法读取先前保存的游戏存档, 对菜单选项进行是否可用 的设置并开始按照保存的时间进行计时。设定需要进行胜利判定。AnswerListener 内部类:监听“显示答案”菜单选项,调用 Solver 类中 solve 方 法显示当前题目的答案,对菜单选项进行是否可用的设置并停止计时。ButtonListener 内部类:监听按钮是否被点击。获取哪个按钮被点击,并且如果左击 按钮就将按钮的数字加一, 右击就减一, 若显示 9 时左击或者显示 1 时右击将会清楚该格数 此文档仅供学习和交流此文档收集于

10、网络,如有侵权请联系网站删除 字,成为未填入状态,如此循环。同时调用 Checker 类的 checkWin 方法进行胜利判定。main 方法:实例化 MainFrame 类,并且设定主界面位置、大小和标题等信息。(2) Checker.javacheck 方法:依次判断输入数字所在的按钮所在行、所在列、所在九宫格内是否有 与填入数字相同的数字, 如果存在相同数字, 便将输入数字的按钮以及矛盾数字的按钮设置 为黄色。如果没有冲突,便将输入数字的按钮设置为绿色。无返回值。checkGap 方法:对现存所有数字为 0的的按钮进行 19的试填, 并且利用与 check 方法相同的对于冲突性判定的方法

11、进行判断,如果存在一个按钮无法填入 19 中的任意数 字,则该按钮无法填入任何数字,将这个按钮设置为红色。无返回值。checkCustom 方法:调用 check 方法和 checkGap 方法检查自定义题目是否存在冲突或 是无法填入任何数字的按钮, 同时调用 Solver 类中的 solve 方法以及 solveC 方法进行正向 和反向的解题, 如果解出不同的答案表明不是唯一解, 这样将弹出相关提示。 如果检查没有 问题,就调用 Saver 类中的 save 方法保存自定义题目。无返回值。checkRandom 方法: 利用与 checkCustom 方法相同的方法检查随机产生的题目是否具有

12、 解答的唯一性。返回代表是否具有答案唯一性的布尔型。checkWin 方法:检查是否所有按钮都被填了数字,以及是否没有出现红色和黄色两种 代表填入数字不正确的颜色。 如果是的话便显示游戏胜利信息和用户所用时间, 并读取排行 榜文件。 把用户用时与排行榜中冠亚季军的成绩作比较。 如果打破记录便提示用户输入姓名 并将排行榜文件进行相应的改写。最后无论是否破纪录都将显示当前 的排行榜。返回代表是否游戏胜利的布尔型。(3) Creator.javacopy 方法:将数组 A 复制给数组 B。无返回值。creator 方法:产生指定难度的随机题目。先在随机位置填入 19 各一个,然后解出答 案。然后挖掉

13、难度要求的空格。 没挖一个测试一下题目是否具有答案的唯一性, 如果不是便 将挖掉的格子原样填上。最后将所有有数字的按钮设定为表示题目的粉色。无返回值。(4) MyReader.java构造方法:获得读取存档或是自定义题目的目录。read 方法:在指定目录的位置使用 FileChooser 读取文件。按照储存的格式读取数据 并且进行按钮的文字颜色设定。无返回值。(5) Saver.java 构造方法:获得储存存档或是自定义题目的目录。save 方法:提示用户输入想要保存的文件名,并在指定目录下新建存档文件。如果 出现同名文件便提示用户是否需要覆盖。同时进行文件名是否是由字母或者数字组成的判 断,

14、若不合法将弹出提示。无返回值。(6) Solver.javasolve 方法:对现存所有数字为同的对于冲突性判定的方法进行判断,递归的手段查看是否后续会出现冲突,dataWrite 方法:按照一定格式向存档文件写入数据。无返回值。0 的的按钮进行 19 的试填,并且利用与 check 方法相 如果有冲突便填入下一个数字。 如果没有冲突将运用 如果后续会出现冲突就将该按钮上的数字清空。 若没有问题就将该按钮设置为浅蓝色。返回布尔型,表明是否存在冲突。solveC 方法:与 solve 方法相同。只是试填的时候是进行 91 倒序的试填。该方法与 solve 方法一起使用能检测题目是否具有答案唯一性

15、。(7) TimeKeeper.java 此文档仅供学习和交流此文档收集于网络,如有侵权请联系网站删除构造方法:设定显示时间的字体。paintComponent 方法:清空先前的时间并画出当前时间。无返回值。 start 方法:计时器开始计时。无返回值。pause方法:计时器暂停。无返回值。stop 方法:计时器停止计时。无返回值。getSecond 方法:获取当前游戏时间(用秒表示) 。返回整形。 setSecond 方法:设定当前游戏时间(读档时使用) 。无返回值。 TimerListener 内部类:定时器。每隔一秒画出当前时间。3 代码实现3.1 MainFrame.javaMainF

16、rame.java 的作用为生成数独游戏的主界面,实现对界面中的菜单栏中的各组件、 文本、按钮的事件监听。其代码如下:import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.*;import java.util.*;public class MainFrame extends JFrame public JPanel pnlGame;public JTextField txtGame;boolean start = false;/ 是否开始计时boolean winCheck = false;/

17、 是否要进行胜利判定 int difficulty = 30;。默认为 / 产生 30 个空格的/随机产生题目的难度(即随机产生有多少个空格的题目) 题目MyReader mr = new MyReader();/ 读档器 Solver my = new Solver();/ 解题器 Creator c = new Creator();/ 随机出题器 int origin = new int 99;/ 题目数字。int matrix = new int 99; /当前游戏数字填入情况的数据。Timekeeper time = new Timekeeper();/ 计时器JMenuItem jm

18、i1 = new JMenuItem( 退出 );JMenuItem jmi2 = new JMenuItem( 快速开局 );JMenuItem jmi3 = new JMenuItem( 自定义题目 );JMenuItem jmi4 = new JMenuItem( 显示答案 ); JMenuItem jmi5 = new JMenuItem( 保存题目 ); JMenuItem jmi6 = new JMenuItem( 载入题目 ); JMenuItem jmi7 = new JMenuItem( 即时存档 );JMenuItem jmi8 = new JMenuItem( 载入先前存

19、档 );JMenuItem jmi9 = new JMenuItem( 简单 );JMenuItem jmi10 = new JMenuItem( 标准 );JMenuItem jmi11 = new JMenuItem( 困难 );此文档仅供学习和交流此文档收集于网络,如有侵权请联系网站删除JMenuItem jmi12 = new JMenuItem( 骨灰 );JMenuItem jmi13 = new JMenuItem( 重玩 );JButton but1=new JButton(PLAY);JButton but2=new JButton( 暂停 );JButton but3=ne

20、w JButton(00:00:00);JButton but4=new JButton( 完成 );public MainFrame()/ 主界面pnlGame = new JPanel9;txtGame = new JTextField99;BorderLayout b1=new BorderLayout(5,5);setLayout(b1);JMenuBar jmb=new JMenuBar();JMenu jm1 = new JMenu( 模式 );JMenu jm2 = new JMenu( 游戏 );JMenu jm3 = new JMenu( 自定义题目 );JMenu jm4

21、= new JMenu( 难度设定 );ActionListener exitListener = new ExitListener();ActionListener startListener = new StartListener();ActionListener customListener = new CustomListener();ActionListener loadListener = new LoadListener();ActionListener saveInGameListener = new SaveInGameListener();ActionListener an

22、swerListener = new AnswerListener();ActionListener saveListener = new SaveListener();ActionListener loadInGameListener = new LoadInGameListener();ActionListener difficultyListener = new DifficultyListener();ActionListener replayListener = new ReplayListener();MouseListener buttonListener = new Butto

23、nListener();/ MouseListener textfieldListener = new TextFieldListener(); jmi1.addActionListener(exitListener);jmi2.addActionListener(startListener);jmi3.addActionListener(customListener); jmi6.addActionListener(loadListener); jmi4.addActionListener(answerListener); jmi5.addActionListener(saveListene

24、r); jmi7.addActionListener(saveInGameListener); jmi8.addActionListener(loadInGameListener); jmi9.addActionListener(difficultyListener); jmi10.addActionListener(difficultyListener); jmi11.addActionListener(difficultyListener); jmi12.addActionListener(difficultyListener); jmi13.addActionListener(repla

25、yListener); jm1.add(jmi2);jm1.add(jmi6);jm1.add(jmi3);此文档仅供学习和交流此文档收集于网络,如有侵权请联系网站删除jm1.add(jmi8);jm1.add(jmi1);jm2.add(jmi4);jm2.add(jmi7); jm2.add(jmi13);jm3.add(jmi5); jm4.add(jmi10);jm4.add(jmi9); jm4.add(jmi11); jm4.add(jmi12);jmb.add(jm1);jmb.add(jm2);jmb.add(jm3);jmb.add(jm4); add(jmb,b1.NORT

26、H);JPanel mainPanel1 = new JPanel();JPanel mainPanel2 = new JPanel();JPanel mainPanel3 = new JPanel();JPanel mainPanel4 = new JPanel(); add(mainPanel1,b1.CENTER); time.setPreferredSize(new Dimension(80,300);add(time,b1.EAST); mainPanel2.add(but1);mainPanel2.add(but3);mainPanel2.add(but2);mainPanel2.

27、add(but4); add(mainPanel2,b1.SOUTH);mainPanel1.setLayout(new GridLayout(3,3); for(int i = 0;i 9;i+) pnlGamei = new JPanel(); pnlGamei.setBorder(BorderFactory.createLineBorder(Color.black);pnlGamei.setLayout(new GridLayout(3,3); for(int j = 0;j 9;j+) txtGameij = new JTextField();txtGameij.setBorder(B

28、orderFactory.createEtchedBorder(); txtGameij.setFont(new Font(Dialog, Font.ITALIC, 20);/ 设置字体大小 txtGameij.setHorizontalAlignment(JTextField.CENTER);/ 设置字体居中 mainPanel1.add(pnlGamei); for(int i = 0;i 3;i+) pnlGame0.add(txtGamei0); pnlGame0.add(txtGamei1);此文档仅供学习和交流此文档收集于网络,如有侵权请联系网站删除pnlGame0.add(txt

29、Gamei2); pnlGame1.add(txtGamei3); pnlGame1.add(txtGamei4); pnlGame1.add(txtGamei5); pnlGame2.add(txtGamei6); pnlGame2.add(txtGamei7); pnlGame2.add(txtGamei8);for(int i = 3;i 6;i+) pnlGame3.add(txtGamei0); pnlGame3.add(txtGamei1); pnlGame3.add(txtGamei2); pnlGame4.add(txtGamei3); pnlGame4.add(txtGame

30、i4); pnlGame4.add(txtGamei5); pnlGame5.add(txtGamei6); pnlGame5.add(txtGamei7); pnlGame5.add(txtGamei8);for(int i = 6;i 9;i+) pnlGame6.add(txtGamei0); pnlGame6.add(txtGamei1); pnlGame6.add(txtGamei2); pnlGame7.add(txtGamei3); pnlGame7.add(txtGamei4); pnlGame7.add(txtGamei5); pnlGame8.add(txtGamei6);

31、 pnlGame8.add(txtGamei7); pnlGame8.add(txtGamei8);but1.addMouseListener(buttonListener); but2.addMouseListener(buttonListener); but4.addMouseListener(buttonListener); for(int i = 0;i 9;i+) /设定每个按钮大小、是否可用等参数for(int j = 0;j 9;j+)if (matrixij = 0)txtGameij.setText();else txtGameij.setText( + matrixij);

32、 txtGameij.setBackground(null); txtGameij.setSize(50,50); txtGameij.setEditable(false);/ 最开始时不能点击 此文档仅供学习和交流此文档收集于网络,如有侵权请联系网站删除void clear()/在重新开局之后清空上次游戏的数据for(int i = 0;i 9;i+)for(int j = 0;j 9;j+) matrixij = 0; originij = 0; txtGameij.setText(); txtGameij.setEditable(false); txtGameij.setBackgrou

33、nd(Color.WHITE);private class ExitListener implements ActionListener/退出游戏public void actionPerformed(ActionEvent e)System.exit(0);private class ReplayListener implements ActionListener/重玩本局public void actionPerformed(ActionEvent e)time.stop();for(int i = 0;i 9;i+) for(int j = 0;j 9;j+) if(txtGameij.

34、getBackground().equals(Color.WHITE) matrixij = 0;txtGameij.setText(); txtGameij.setEditable(false);time.setSecond(0);private class DifficultyListener implements ActionListener /难度设定。选中难度的菜单选项前将会出现 public void actionPerformed(ActionEvent e) jmi9.setText( 简单 ); jmi10.setText( 标准 ); jmi11.setText( 困难 )

35、; jmi12.setText( 骨灰 ); if(e.getSource().equals(jmi9) jmi9.setText( 简单 ); difficulty = 15;if(e.getSource().equals(jmi10) jmi10.setText( 标准 ); difficulty = 30; if(e.getSource().equals(jmi11) jmi11.setText( 困难 );此文档仅供学习和交流此文档收集于网络,如有侵权请联系网站删除difficulty = 45; if(e.getSource().equals(jmi12) jmi12.setText

36、( 骨灰 ); difficulty = 81;/在确定解答的情况下尽可能多的挖掉格子。private class StartListener implements ActionListener /开始随机游戏 .public void actionPerformed(ActionEvent e) jmi4.setEnabled(true);/将每个模式可以使用的和不可用的菜单命令进行设定,下同 jmi5.setEnabled(false); jmi7.setEnabled(true); jmi13.setEnabled(true); start = true;clear();c.creato

37、r(origin,txtGame,difficulty);/ 产生随即题目 c.copy(origin,matrix);/ 将结果复制给 matrix 数组 winCheck = true;/ 需要进行胜利判定 time.setSecond(0);/计时器清零private class SaveListener implements ActionListener /检验自定义题目并储存题目。public void actionPerformed(ActionEvent e) Checker c = new Checker(); c.checkCustom(txtGame,matrix);/检查

38、题目是否有冲突以及是否有唯一解并保存private class SaveInGameListener implements ActionListener/游戏中保存进度。public void actionPerformed(ActionEvent e)Saver saver = new Saver(save); /将保存目录设定为 save saver.save(txtGame,matrix,time.getSecond();/ 保存 private class LoadInGameListener implements ActionListener /即时读档。public void ac

39、tionPerformed(ActionEvent e) jmi4.setEnabled(true); jmi5.setEnabled(false); jmi7.setEnabled(true);此文档仅供学习和交流此文档收集于网络,如有侵权请联系网站删除jmi13.setEnabled(true);start = true;clear();int saveTime = 0;mr = new MyReader(save);/告诉读档器应该从 save 目录去读游戏存档saveTime = mr.read(txtGame,matrix,origin); /读取游戏存档以及时间winCheck =

40、 true;/ 需要进行胜利判定 time.setSecond(saveTime);/将计时器时间设定为保存的时间private class LoadListener implements ActionListener /载入自定义题目public void actionPerformed(ActionEvent e) jmi4.setEnabled(true); jmi5.setEnabled(false); jmi7.setEnabled(true); jmi13.setEnabled(true); clear();mr = new MyReader(puzzle);/告诉读档器应该从 p

41、uzzle 目录去读自定义题目 mr.read(txtGame,matrix,origin);/ 读取题目 c.copy(origin,matrix);/ 把题目复制给 origin start = true;winCheck = true;/ 需要进行胜利判定 time.setSecond(0);/计时器清零private class CustomListener implements ActionListener /进入自定义题目模式public void actionPerformed(ActionEvent e) jmi4.setEnabled(false); jmi5.setEnab

42、led(true); jmi7.setEnabled(false); jmi13.setEnabled(false); clear();for(int i = 0;i 9;i+)for(int j = 0;j 9;j+) txtGameij.setBackground(Color.WHITE); txtGameij.setEditable(true);start = true;time.stop(); winCheck = false;/ 不需要进行胜利判定此文档仅供学习和交流此文档收集于网络,如有侵权请联系网站删除private class ButtonListener extends Mo

43、useAdapter/监听鼠标动作public void mouseClicked(MouseEvent e)Checker myChecker = new Checker(); if(e.getSource() = but2) time.pause(); if(e.getSource() = but1) for(int i = 0;i 9;i+) for(int j = 0;j 9;j+) if(matrixij = 0) txtGameij.setText(); txtGameij.setEditable(true);time.start(); if(e.getSource() = but

44、4) for (int i = 0; i 9; i +) for (int j = 0; j 9; j +) if (txtGameij.getText().compareTo() != 0) matrixij=(int)Integer.parseInt(txtGameij.getText(); txtGameij.setText(+matrixij);elsematrixij = 0; txtGameij.setText(); myChecker.check(txtGame,matrix);myChecker.checkGap(txtGame,matrix);进行胜利 winCheck=my

45、Checker.checkWin(txtGame,matrix,time.getSecond(),winCheck);/ 判定private class AnswerListener implements ActionListener /显示当前题目的答案。public void actionPerformed(ActionEvent e) jmi4.setEnabled(false); jmi5.setEnabled(false); jmi7.setEnabled(false); jmi13.setEnabled(false);此文档仅供学习和交流此文档收集于网络,如有侵权请联系网站删除ti

46、me.stop();start = false;winCheck = false;/ 需要进行胜利判定my.solve(origin,txtGame);/ 显示答案public static void main(String args)MainFrame m = new MainFrame();m.setTitle( 数独游戏 );m.setLocation(100,150);/m.setLocationRelativeTo(null); m.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); m.setSize(550,550);m.setVisi

47、ble(true);m.setResizable(false);3.2 MyReader.javaMyReader.java 的作用是import javax.swing.*;import java.awt.*;import java.io.*;import java.util.*;import javax.swing.filechooser.FileFilter;public class MyReaderprivate String lpath = ;/读取存档的路径:如果是游戏存档即为save;题目存档即为 puzzleMyReader(String lpath)/ 获取读取目录this.

48、lpath = lpath;int read(JTextField txtGame,int matrix,int origin)/ 读取存档文件int saveTime = 0;JFileChooser file = new JFileChooser(. + lpath);/将读取路径设定为需要路径并且开启FileChooserfile.setAcceptAllFileFilterUsed(true);/允许读取所有路径下文件int result = file.showOpenDialog(null);/ 获取用户动作 if(result = JFileChooser.APPROVE_OPTI

49、ON) /若用户选择了一个文件就进行读取String path = file.getSelectedFile().getAbsolutePath();/ 获取文件的路径File readFile = new File(path);tryDataInputStream input = new DataInputStream(newFileInputStream(readFile);for(int i = 0;i 9;i+) /按照储存的格式依次读取数组各个位置的值、按钮的颜色此文档仅供学习和交流此文档收集于网络,如有侵权请联系网站删除for(int j = 0;j 9;j+) matrixij

50、= input.readInt(); int color = input.readInt(); int temp = input.readInt(); /为了方便调试在储存时用 99 做了分隔 if(matrixij != 0)/ 设定按钮的显示数字 txtGameij.setText( + matrixij); txtGameij.setBackground(null);txtGameij.setEditable(false); if(lpath.equals(puzzle)/ 若读取的是题目则将不为 0 的按钮颜色设定为表示题目的粉色 txtGameij.setBackground(Col

51、or.PINK); Creator c = new Creator();c.copy(matrix,origin);else if(lpath.equals(save) /若读取的是游戏存档则按照储存的颜色进行设定 Checker c = new Checker();switch(color)case 1 : txtGameij.setBackground(Color.RED);break;case 3 : txtGameij.setBackground(Color.YELLOW);break; case 4 : txtGameij.setBackground(Color.PINK);orig

52、inij = matrixij;break;case 2 : txtGameij.setBackground(Color.GREEN);break;case 0 : break;Checker checker = new Checker(); checker.checkGap(txtGame,matrix);/ 为确保颜色显示没有错误,重新检查空的格子是否不能填入数字 if(lpath.equals(save)/若是读取游戏存档还要读取保存时的游戏时间saveTime = input.readInt();input.close();catch(IOException e)return save

53、Time;/ 返回读取的保存时间用来设定计时器。3.3 Checker.javaChecker.java 的作用是import javax.swing.*;import java.awt.*;import java.io.*;此文档仅供学习和交流此文档收集于网络,如有侵权请联系网站删除import java.util.*;class Checkerint color = new int99;/ 按钮的颜色Solver s = new Solver();public Checker()void check(JButton jbt,int matrix)/颜色设定为绿色,/检查数字是否与行列或者是

54、九宫格出现冲突,若没有就将所在按钮 不然就设定为黄色。String returnString = new String2; for(int line = 0;line 9;line+) for(int column = 0;column 9;column+) returnString0 = returnString1 = ; for(int i = 0;i 9;i+)/ 检查行列 if (i != column) & (matrixlinecolumn = matrixlinei) returnString1 += i; returnString0 += line;if (i != line) & (matrixlinecolumn = matrixicolumn) returnString0 += i;returnString1 += column;int blockStartLine,blockS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论