import com.sun.source.tree.ArrayAccessTree;
import 窗口浓缩版.MapElement;
import 窗口浓缩版.SudokuGenerator;
import 窗口浓缩版.point;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.*;
import java.util.List;
import static java.awt.Color.*;
//数独 需要输入数字的功能
//1.制定类似贪食蛇一样的窗口的,里面放满了类似有规律的数字
//2.利用set或者Cont创建有规律的数字的数组 设计:点击一次当前由空白变成数字0开始加1
//3.寻找遮蔽规律 要藏多少个
//完成
public class WindowMake extends JFrame {
//参数列表
int charge = 9; //这里设置几宫格 数独可以有16宫格
int Row = charge;//长
int Col = charge;//宽
int SIZE = 80;//格子大小
int TARGET = 20;//要随机遮挡的数量
MapElement[][] arr = new MapElement[Row][Col];//地图元素 Zero,Math
int[][] OneMate = new int[charge][charge];//答案数组
int[][] TwoMate = new int[charge][charge];//加工后数组
int[][] shadow = new int[TARGET][TARGET];//遮挡个数所属数组
Set<point> pointSet=new HashSet<>();
static int statics=0;
public void start() throws InterruptedException {
//设置窗口标题
this.setTitle("数独九宫格");
//窗口是否可见
this.setVisible(true);
//窗口大小
this.setSize(Row * SIZE + SIZE * 7, Col * SIZE + SIZE * 2);
//设置在中央出现
this.setVisible(true);
this.setLocationRelativeTo(null);
//初始化数独地图和数字显示
initMap(arr); //前期进行划线即可
initOneMate(OneMate);//初始化0
//获得标准答案
SudokuGenerator sudokuGenerator = new SudokuGenerator();
//转向指针直接丢弃之前的内存地址
OneMate=sudokuGenerator.getGrid();
//获得标准答案TwoMate shadow暂时没使用上,遮挡的值放在了pointSet
Shadow(OneMate,shadow,TwoMate);
//生成数独答案
/* Boolean flag=Boolean.TRUE;
cc: while (flag) {
try {
initOneMate(OneMate);//初始化0
ResetTatget(OneMate);//刷新数组 卡是因为进入死循环,并不是报错 需要进行计时
flag = containsZero(OneMate);
break;
} catch (Exception e) {
continue cc;
}
}*/
//加工答案获得掩盖数组
//Shadow(OneMate,shadow,TwoMate);
//添加键盘事件数组加+1事件
//重写鼠标点击 若点击成功就+1且刷颜色(蓝色)
this.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getButton() == 1) //按下的是鼠标左键
{
int click=0;
click++;//测试用数值
int x = e.getX();
int y = e.getY();
//需要把系统的数值调成自己想要的
int xIntarr=(x-30+SIZE/3+30)/SIZE-1;
int yIntarr=(y-10+SIZE/2+50)/SIZE-2;
System.out.println("第"+click+"次点击");
System.out.println(xIntarr+","+yIntarr);
System.out.println(x+","+y);
//点击到了图案,消除数组当前的x,y坐标,并进行Reset,加分
point point = new point();
//遍历消除的set Onmate遮挡数组点击就加1
for (窗口浓缩版.point point1 : pointSet) {
//终止条件
if (point1.getX()==xIntarr && point1.getY()==yIntarr)
{
if (OneMate[xIntarr][yIntarr]<9)
{
OneMate[xIntarr][yIntarr]++;
}
break;
}
}
}
if (e.getButton() == MouseEvent.BUTTON3)
{
int click=0;
click++;//测试用数值
int x = e.getX();
int y = e.getY();
//需要把系统的数值调成自己想要的
int xIntarr=(x-30+SIZE/3+30)/SIZE-1;
int yIntarr=(y-10+SIZE/2+50)/SIZE-2;
System.out.println("第"+click+"次点击");
System.out.println(xIntarr+","+yIntarr);
System.out.println(x+","+y);
//点击到了图案,消除数组当前的x,y坐标,并进行Reset,加分
point point = new point();
//遍历消除的set Onmate遮挡数组点击就加1
for (窗口浓缩版.point point1 : pointSet) {
//终止条件
if (point1.getX()==xIntarr && point1.getY()==yIntarr)
{
if (OneMate[xIntarr][yIntarr]>0)
{
OneMate[xIntarr][yIntarr]--;
}
break;
}
}
}
}
});
while (true) {//点击了没反应,属于鼠标信息点击获取失败的问题
//另一种解释是不能变移动边点击
this.update(this.getGraphics());
}
}
private void initOneMate(int[][] oneMate) {
for (int i = 0; i < charge; i++) {
for (int i1 = 0; i1 < charge; i1++) {
oneMate[i][i1]=0;
}
}
}
/**
* TODO 对数组进行遮挡
* @param oneMate 新的形成遮挡的数组
* @param shadow 要遮挡多少个
* @param TwoMate 校对答案的数组
*/
private void Shadow(int[][] oneMate, int[][] shadow, int[][] TwoMate) {
//赋值加工数组oneMate
for (int i = 0; i < charge; i++) {
for (int i1 = 0; i1 < charge; i1++) {
TwoMate[i][i1]=oneMate[i][i1];
}
}
//初始化随机遮挡数组
Random r=new Random();
//只生成一次 所以set即可
while (pointSet.size()<TARGET)
{
int x = r.nextInt(charge);
int y = r.nextInt(charge);
pointSet.add(new point(x,y));
}
//进行随机遮挡 -1标记
for (point point : pointSet) {
oneMate[point.getX()][point.getY()]=0;
}
}
//填画数组
@Override
public void paint(Graphics N)//N为画笔 且为重载
{
//将白背景调黑
N.setColor(BLACK);
N.fillRect(0, 0, Row * SIZE + SIZE * 7, Col * SIZE + SIZE * 2);
//渲染数组
for (int i = 0; i < Row; ++i) {
for (int j = 0; j < Col; ++j) {
switch (arr[i][j]) {
case Null:
break;
//正方形
case Math:
//N.setColor(random(this.getGraphics()));
N.setColor(green);
N.drawRect((i + 1) * SIZE - SIZE / 3, (j + 1) * SIZE, SIZE, SIZE);//四点方块
N.setColor(yellow);
if (OneMate[i][j]==0)
{
//啥也不做
}
else if(OneMate[i][j]!=0) {
没有合适的资源?快使用搜索试试~ 我知道了~
Java快乐小游戏-数独
共31个文件
xml:9个
class:8个
java:6个
5星 · 超过95%的资源 需积分: 0 2 下载量 147 浏览量
2023-07-02
08:23:55
上传
评论 1
收藏 47KB ZIP 举报
温馨提示
Jav小游戏---数独
资源推荐
资源详情
资源评论
收起资源包目录
MathAlone.zip (31个子文件)
MathAlone
MathAlone.iml 433B
src
DoodleJumpGame.java 3KB
窗口浓缩版
MapElement.java 151B
SudokuGenerator.java 4KB
point.java 1KB
WindowMakeTest.java 2KB
WindowMake.java 13KB
out
production
MathAlone
DoodleJumpGame.class 4KB
窗口浓缩版
SudokuGenerator.class 2KB
MapElement.class 968B
point.class 2KB
WindowMake$1.class 2KB
DoodleJumpGame$1.class 637B
WindowMake.class 6KB
WindowMake$2.class 667B
.idea
dataSources
e137b2e2-ae74-4c77-b179-7c25ba8122d2.xml 79KB
e137b2e2-ae74-4c77-b179-7c25ba8122d2
storage_v2
_src_
schema
performance_schema.kIw0nw.meta 76B
sys.zb4BAA.meta 61B
information_schema.FNRwLQ.meta 76B
mysql.osA4Bg.meta 63B
dataSources.local.xml 999B
easyCodeTableSetting.xml 5KB
workspace.xml 7KB
misc.xml 378B
dataSources.xml 530B
inspectionProfiles
Project_Default.xml 155B
compiler.xml 169B
modules.xml 265B
.gitignore 184B
sonarlint
issuestore
0
c
8
d
index.pb 0B
a
3
9
0
6
8
2
f
4
3
b
securityhotspotstore
0
c
8
d
index.pb 0B
a
3
9
0
6
8
2
f
4
3
b
共 31 条
- 1
资源评论
- Mypreferenc3722023-12-21测试里面generateSudoku是什么呀
狗头版猫头鹰
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功