/**************************
一早增加了昨晚的想法,data函数一定要实现产生的点数够多
rand值与check判断处的值想想不一样,rand>check里的rand 而相等才是符合逻辑的
下一版本就是增加2链表以添加斜线与增大间距实现加载图片
http:///gameplay/14193/index.shtml
关灯游戏3
没想到会于这游戏再结缘
会的东西,不应该只是说说而已……
纸上谈兵过后的具体实现
理论为心 技术为要
第一阶段产生地图的思考
类似而已 还是有区别的
本程序练习图像化 地图是要加载图片 更方便操作
特别地可以用到;;;链表
连线本身是一个问题
以下为import可化简 本处可按逻辑实现基本功能运行
**************************/
import java.awt.Frame;
import java.awt.Point;
import java.awt.p_w_picpath.BufferedImage;
import java.io.File;
import java.lang.reflect.Field;
import java.util.List;
import java.awt.Button;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.ArrayList;
import java.util.Date;
import java.util.Stack;
import java.util.Timer;
import java.util.TimerTask;
import javax.p_w_picpathio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main extends JPanel {
static Stack<Integer> stack = new Stack(); // 创建堆栈对象
static int a = 1;
static int rand = 1;
static Point p = null;
static Point p2 = null;
static int count=0;
public static Frame frame = new Frame();
static int s[][] = new int [10][10];
static int ss[][] = new int [10][10];
public static void data() {
java.util.Random random=new java.util.Random();// 定义随机类
int sr=random.nextInt(120);
int o=2;int p=2;
//随机产生rand个连续的点在地图上
while(sr-->0)
{
int r=random.nextInt(20)%4;
if(0<o&&o<9&&0<p&&p<9)
{s[o][p]=1;ss[o][p]=1; ///stack.push(o); stack.push(p);rand++;
rand++;
}
if(r==0) o--;
if(r==1) p++;
if(r==2) o++;
if(r==3) p--;
}
if(rand<20)
clear();
}
public static void clear() {
for(int i=0;i<10;i++)
{for(int j=0;j<10;j++) s[i][j]=ss[i][j]=0;
}
rand=0;
data();
}
public static int check() {
for(int i=0;i<10;i++)
{for(int j=0;j<10;j++)
if(ss[i][j]==1&&ss[i][j]==0)count++;
}
if(count==rand)return 1;
return 0;
}
public static void main(String[] args) {
data();
//int x=stack.peek();
//int y=stack.pop();
//while(rand-->0)
// System.out.println("元素"+rand+"出栈");
// System.out.println("元素"+stack.pop()+"出栈");
// for(int i=0;i<10;i++)
// {for(int j=0;j<10;j++) System.out.print(" "+s[i][j]);
// System.out.println(" ");
// }
// for(int i=0;i<10;i++)
// {for(int j=0;j<10;j++) System.out.print(" "+ss[i][j]);
// System.out.println(" ");
// }
System.out.println(" "+rand);
Main f = new Main();
frame.setTitle("【点灯游戏】");
frame.add(f);
frame.setSize(500, 500);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
//frame.
f.Action();
frame.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
int x = e.getX();
int y = e.getY();
count++;
p = new Point(x, y);
int i=(x-35)/20;
int j=(y-55)/20;
//先判断在ss数组中的信息 是1才进行
if(ss[j][i]==1)
{
s[j][i]=1-s[j][i];
if(ss[j-1][i]==1)s[j-1][i]=1-s[j-1][i];
if(ss[j+1][i]==1)s[j+1][i]=1-s[j+1][i];
if(ss[j][i-1]==1)s[j][i-1]=1-s[j][i-1];
if(ss[j][i+1]==1)s[j][i+1]=1-s[j][i+1];
}
//再改变s中的状态
if(check()==1) p2 = new Point(330, 220);
else p2 = new Point(330, 2200);
frame.repaint();
}
});
frame.setVisible(true);
}
private Timer timer;
private void Action() {
// ListenerClick();
timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
frame.repaint();
}
}, new Date(), 1000);
}
@Override
public void paint(Graphics g) {
g.drawLine(30,30,30,300); // 左边
g.drawLine(30,30,300,30); // 上边
g.drawLine(300,30,300,300);// 右边
g.drawLine(30,300,300,300);// 下边
g.drawString("【点灯游戏3】",333,33);
g.drawString("点正方形区域,相连区域变化",333,50);
int i=0,j=0;
for( i=0;i<10;i++)
{
for( j=0;j<10;j++)
if(s[i][j]==1)g.drawString("+",40+j*20,40+i*20);
}
// for( i=1;i<9;i++)
// {
// for( j=1;j<9;j++)
// if(ss[i][j]==1&&ss[i][j+1]==1) g.drawLine(40+j*20,40+i*20,40+(j+1)*20,40+i*20); //右
// // if(ss[i][j]==1&&ss[i][j-1]==1) g.drawLine(40+j*20,40+i*20,40+(j-1)*20,40+i*20); //左
// if(ss[i][j]==1&&ss[i-1][j]==1) g.drawLine(40+j*20,40+i*20,40+j*20,40+(i-1)*20); //上
// //if(ss[i][j]==1&&ss[i+1][j]==1) g.drawLine(40+j*20,40+i*20,40+j*20,40+(i+1)*20); //下
// }
for( i=1;i<9;i++)
{
for( j=1;j<9;j++)
if(ss[i][j]==1&&ss[i][j+1]==1) g.drawLine(40+j*20,40+i*20,40+(j+1)*20,40+i*20); //右
if(ss[i][j]==1&&ss[i][j-1]==1) g.drawLine(40+j*20,40+i*20,40+(j-1)*20,40+i*20); //左
}
for( i=1;i<9;i++)
{
for( j=1;j<9;j++)
if(ss[i][j]==1&&ss[i-1][j]==1) g.drawLine(40+j*20,40+i*20,40+j*20,40+(i-1)*20); //上
if(ss[i][j]==1&&ss[i+1][j]==1) g.drawLine(40+j*20,40+i*20,40+j*20,40+(i+1)*20); //下
}
File file = new File("1.jpg");
if (p != null)
{ if(30<p.getX()&&p.getX()<300&&30<p.getY()&&p.getY()<300)
{
g.drawString("YOU had win",(int)p2.getX(), (int)p2.getY());
int ii=(int)(p.getX()-35)/20;int jj=(int)(p.getY()-35)/20;
// try{
// BufferedImage src = javax.p_w_picpathio.ImageIO.read(file);
// g.drawImage(src,(int)p.getX(),(int)p.getY(),10,10,null);
// }
// catch(Exception e){
// e.printStackTrace();
// }finally{
// ;
// }
g.drawString("X = "+ii,333,70);
g.drawString("Y = "+jj,333,90);
g.drawString("Y = "+ss[jj][ii],333,110);
}
else
{
g.drawString("【error】",44,344);
g.drawString("X = "+p.getX(),44,360);
g.drawString("ss[][] = "+p.getY(),44,390);
}
}
g.drawString("我会一直打印时间 "+a+"s", 100, 400);
a++;
}
}点点点游戏之 点灯游戏 是比C好实现一点
原创
©著作权归作者所有:来自51CTO博客作者wzdouban的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
一点点改变
一点点改变,格局打开~
源码分析 架构设计 问题排查 -
一点点金融
比如字节跳动、阿里、腾讯、拼多多、谷歌、英伟达、meta、微软、苹果、亚马逊,他们形成了一个互联网新世界,相当于新世纪的
金融 人工智能 大数据 信号线 基础设施 -
一点点金融 5
高成交密度区域表明该价格区间内有强烈的买卖意愿和大量的交易,而低成交密度区域则可能预示着价格的快速移动,因为较少的交易就能推动价格突
金融 大数据 人工智能 技术分析 分析工具
















