建材秒知道
登录
建材号 > 设计 > 正文

求问上海写意视觉旗下的 设计连连看 是做什么的

小巧的曲奇
儒雅的小鸽子
2022-12-29 20:09:11

求问上海写意视觉旗下的 设计连连看 是做什么的??

最佳答案
鳗鱼柜子
无聊的大树
2026-04-22 03:20:38

做建筑设计外包的,其实就是把他们线下的效果图、多媒体动画、BIM等等各项业务搬到线上,他们自称是“建筑设计行业在线协作及资源共享平台”,上面资源确实挺多的,找找资料什么的还挺方便。

是可以在线下单的,流程是在线填写基本需求以后,他们那边会有人联系你。我用过几次,觉得还挺好用的,毕竟写意的质量在圈子里还是比较有口皆碑的,这个线上图个方便快捷,而且他们最近搞活动,线上下单有优惠hhh

最新回答
玩命的大白
慈祥的苗条
2026-04-22 03:20:38

刚试了。。测试通过。。

importjavax.swing.*

importjava.awt.*

importjava.awt.event.*

publicclass LianLianKan implements ActionListener {

JFrame mainFrame// 主面板

Container thisContainer

JPanel centerPanel, southPanel, northPanel//子面板

JButton diamondsButton[][] = newJButton[6][5]// 游戏按钮数组

JButton exitButton, resetButton, newlyButton// 退出,重列,重新开始按钮

JLabel fractionLable = newJLabel("0")// 分数标签

JButton firstButton, secondButton// 分别记录两次被选中的按钮

// 储存游戏按钮位置(这里其实只要6行,5列。但是我们用了8行,7列。是等于在这个面板按钮的周围还围

//了一层是0的按钮,这样就可以实现靠近面板边缘的两个按钮可以消去)

int grid[][] = new int[8][7]

static boolean pressInformation = false// 判断是否有按钮被选中

int x0 = 0, y0 = 0, x = 0, y = 0, fristMsg =0, secondMsg = 0, validateLV// 游戏按钮的位置坐标

int i, j, k, n// 消除方法控制

public void init() {

mainFrame = new JFrame("JKJ连连看")

thisContainer = mainFrame.getContentPane()

thisContainer.setLayout(new BorderLayout())

centerPanel = new JPanel()

southPanel = new JPanel()

northPanel = new JPanel()

thisContainer.add(centerPanel,"Center")

thisContainer.add(southPanel,"South")

thisContainer.add(northPanel,"North")

centerPanel.setLayout(new GridLayout(6, 5))

for (int cols = 0cols <6cols++) {

for (int rows = 0rows <5rows++) {

diamondsButton[cols][rows] = newJButton(String

.valueOf(grid[cols + 1][rows + 1]))

diamondsButton[cols][rows].addActionListener(this)

centerPanel.add(diamondsButton[cols][rows])

}

}

exitButton = new JButton("退出")

exitButton.addActionListener(this)

resetButton = new JButton("重列")

resetButton.addActionListener(this)

newlyButton = new JButton("再来一局")

newlyButton.addActionListener(this)

southPanel.add(exitButton)

southPanel.add(resetButton)

southPanel.add(newlyButton)

fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable

.getText())))

northPanel.add(fractionLable)

mainFrame.setBounds(280, 100, 500, 450)

mainFrame.setVisible(true)

mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

}

public void randomBuild() {

int randoms, cols, rows

for (int twins = 1twins <= 15twins++){//一共15对button,30个

randoms = (int) (Math.random() * 25 +1)//button上的数字

for (int alike = 1alike <= 2alike++){

cols = (int) (Math.random() * 6 + 1)

rows = (int) (Math.random() * 5 + 1)

while (grid[cols][rows] != 0) {//等于0说明这个空格有了button

cols = (int) (Math.random() * 6 + 1)

rows = (int) (Math.random() * 5 + 1)

}

this.grid[cols][rows] = randoms

}

}

}

public void fraction() {

fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable

.getText()) + 100))

}

public void reload() {

int save[] = new int[30]

int n = 0, cols, rows

int grid[][] = new int[8][7]

for (int i = 0i <= 6i++) {

for (int j = 0j <= 5j++) {

if (this.grid[i][j] != 0) {

save[n] = this.grid[i][j]//记下每个button的数字

n++//有几个没有消去的button

}

}

}

n = n - 1

this.grid = grid

while (n >= 0) {//把没有消去的button重新放一次

cols = (int) (Math.random() * 6 + 1)

rows = (int) (Math.random() * 5 + 1)

while (grid[cols][rows] != 0) {

cols = (int) (Math.random() * 6 + 1)

rows = (int) (Math.random() * 5 + 1)

}

this.grid[cols][rows] = save[n]

n--

}

mainFrame.setVisible(false)

pressInformation = false// 这里一定要将按钮点击信息归为初始

init()

for (int i = 0i <6i++) {

for (int j = 0j <5j++) {

if (grid[i + 1][j + 1] == 0)

diamondsButton[i][j].setVisible(false)

}

}

}

public void estimateEven(int placeX, intplaceY, JButton bz) {

if (pressInformation == false) {

x = placeX

y = placeY

secondMsg = grid[x][y]

secondButton = bz

pressInformation = true

} else {

x0 = x

y0 = y

fristMsg = secondMsg

firstButton = secondButton

x = placeX

y = placeY

secondMsg = grid[x][y]

secondButton = bz

if (fristMsg == secondMsg &&secondButton != firstButton) {

xiao()

}

}

}

public void xiao() { // 相同的情况下能不能消去。仔细分析,不一条条注释

if ((x0 == x &&(y0 == y + 1 || y0 ==y - 1))

|| ((x0 == x + 1 || x0 == x - 1) &&(y0 == y))) { // 判断是否相邻

remove()

} else {

for (j = 0j <7j++) {

if (grid[x0][j] == 0) { // 判断和第一个按钮同行的哪个按钮为空

//如果找到一个为空的,就按列值的三种情况比较第二个按钮与空按钮的位置

if (y >j) {//第二个按钮在空按钮右边

for (i = y - 1i >= ji--) { //检测从第二个按钮横向左边到空格所在列为止是否全是空格

if (grid[x][i] != 0) {

k = 0

break//存在非空格的就退出,这一退出就不可能k==2了,所以就会到下而215行出同理的判断列

} else {

k = 1

} // K=1说明全是空格通过了第一次验证,也就是从第二个按钮横向左边到空格所在列为止全是空格

}

if (k == 1) {

linePassOne()//进入第二次验证,也就是从第一个按钮到它同行的空格之间的空格判断

}

}

if (y <j) { // 第二个按钮在空按钮左边

for (i = y + 1i <= ji++) {//检测从第二个按钮横向右边到空格所在列为止是否全是空格

if (grid[x][i] != 0) {

k = 0

break

} else {

k = 1

}

}

if (k == 1) {

linePassOne()

}

}

if (y == j) {//第二个按钮和空按钮同列

linePassOne()

}

}

//第三次检测,检测确定为空的第j列的那个按钮竖向到第二个按钮,看是不是有按钮

if (k == 2) {

if (x0 == x) {//第一,二按钮在同行

remove()

}

if (x0 <x) {//第一按钮在第二按钮下边

for (n = x0n <= x - 1n++) {//从空按钮竖向到第二个按钮所在行是否有按钮

if (grid[n][j] != 0) {

k= 0

break

}

//没有按钮,说明这条路经就通了

if (grid[n][j] == 0 &&n == x -1) {

remove()

}

}

}

if (x0 >x) {//第一按钮在第二按钮上边

for (n = x0n >= x + 1n--) {

if (grid[n][j] != 0) {

k = 0

break

}

if (grid[n][j] == 0 &&n == x +1) {

remove()

}

}

}

}

}//-------------------------------------for

//当上面的检测与第一个按钮同行的空格按钮失败后(不能找到与第二个按钮的相连路经),下面就执行

//检测与第一个按钮同列的空格按钮

for (i = 0i <8i++) {

if (grid[i][y0] == 0) {// 判断和第一个按钮同列的哪个按钮为空

if (x >i) {//第二个按钮在这个空按钮的下面

for (j = x - 1j >= ij--) {

if (grid[j][y] != 0) {

k = 0

break

} else {

k = 1

}

}

if (k == 1) {

rowPassOne()

}

}

if (x <i) {//第二个按钮在这个空按钮的上面

for (j = x + 1j <= ij++) {

if (grid[j][y] != 0) {

k = 0

break

} else {

k = 1

}

}

if (k == 1) {

rowPassOne()

}

}

if (x == i) {//第二个按钮与这个空按钮同行

rowPassOne()

}

}

if (k == 2) {

if (y0 == y) {//第二个按钮与第一个按钮同列

remove()

}

if (y0 <y) {//第二个按钮在第一个按钮右边

for (n = y0n <= y - 1n++) {

if (grid[i][n] != 0) {

k = 0

break

}

if (grid[i][n] == 0 &&n == y -1) {

remove()

}

}

}

if (y0 >y) {//第二个按钮在第一个按钮左边

for (n = y0n >= y + 1n--) {

if (grid[i][n] != 0) {

k = 0

break

}

if (grid[i][n] == 0 &&n == y +1) {

remove()

}

}

}

}

}//--------------------------------for

}//-------------else

}//------------xiao

public void linePassOne() {

if (y0 >j) { // 第一按钮同行空按钮在左边

for (i = y0 - 1i >= ji--) { // 判断第一按钮同左侧空按钮之间有没按钮

if (grid[x0][i] != 0) {

k = 0

break

} else {

k = 2

} // K=2说明通过了第二次验证

}

}

if (y0 <j) { // 第一按钮同行空按钮在右边

for (i = y0 + 1i <= ji++) {

if (grid[x0][i] != 0) {

k = 0

break

} else {

k = 2

}

}

}

}

public void rowPassOne() {

if (x0 >i) {//第一个按钮在与它同列的那个空格按钮下面

for (j = x0 - 1j >= ij--) {

if (grid[j][y0] != 0) {

k = 0

break

} else {

k = 2

}

}

}

if (x0 <i) {//第一个按钮在与它同列的那个空格按钮上面

for (j = x0 + 1j <= ij++) {

if (grid[j][y0] != 0) {

k = 0

break

} else {

k = 2

}

}

}

}

public void remove() {

firstButton.setVisible(false)

secondButton.setVisible(false)

fraction()

pressInformation = false

k = 0

grid[x0][y0] = 0

grid[x][y] = 0

}

public void actionPerformed(ActionEvent e) {

if (e.getSource() == newlyButton) {

int grid[][] = new int[8][7]

this.grid = grid

randomBuild()

mainFrame.setVisible(false)

pressInformation = false

init()

}

if (e.getSource() == exitButton)

System.exit(0)

if (e.getSource() == resetButton)

reload()

for (int cols = 0cols <6cols++) {

for (int rows = 0rows <5rows++) {

if (e.getSource() ==diamondsButton[cols][rows])

estimateEven(cols + 1, rows + 1,diamondsButton[cols][rows])

}

}

}

public static void main(String[] args) {

LianLianKan llk = new LianLianKan()

llk.randomBuild()

llk.init()

}

}

独特的翅膀
跳跃的乌龟
2026-04-22 03:20:38
在设计采用单机模式,当在规定的时间内消完全部的图片则当前关卡通过,若果在规定的时间内没能消完所有的图片则游戏结束,重新开始游戏。游戏规则是模仿普通的连连看游戏,主要是鼠标两次点击的图片是否消去的问题,当前,前提是点击两张相同的图片,若点击的是同一张图片或者两张不同的图片,则不予处理。在两张相同的图片用三根以内的直线连在一起,就可以消去;否则,不予处理。

游戏过程,如果玩家在一定的时间内消完则提示玩家胜利,并进入下一关。如果在一定的时间内图片没有消完则提示玩家时间到。每关以此类推。

一、 所有图片都是按约定好的种类数和在同一区域的重复次数随机出现,并且每张图片的出现次数为偶数,时间会有限制,每一关的图片数量或时间是不同的,这样就增加了游戏的难度。

二、 在同一区域中,图片出现的种类数和重复数是可以由玩家选择的,时间由游戏约定。不过玩家选择的种类数和重复次数必须是偶数才可以顺利完成游戏,否则游戏虽然可以正常运行,但无法完成游戏。

在一种方案中,由于出现的图像按种类数和重复数都由软件约定,这样就缺乏玩家自主选择的空间,只是在完系统已经是设定好的游戏,不能改变什么,这样就在无意中降低了玩家在游戏过程中的乐趣,最后致使玩家放弃继续玩下去。我们参考了网络上的连连看游戏,考虑到游戏的娱乐性。所以我们放弃第一种方案的设计思想,参考网络上流行的连连看游戏,设计第二种方案。

3主要问题

开始制作游戏时,主要解决问题有以下几个方面:如何设置整个游戏的界面;如何控制连连看游戏中随机图片的生成且每种图片必须为偶数个;游戏开始后,判断鼠标两次点击的图片能否消去,即图片是否相同且图片之间路径的判断;如何判断游戏是否结束以及输赢问题等。

3.4技术要求

本游戏软件可以再大多数计算机上运行,游戏中能正确判断鼠标两次点下的图片是否可以消去、能正确判断游戏是否已经结束。

4、 系统设计:

针对上面的需求分析,我们把整个软件分成两个模块:1、整体界面的设计和图片的随机生成;2、图片路径判断函数;

一下就是系统结构图:

4.1基本思路

4.1.1游戏画面问题的思路

画面,对于设计者来说,可以算是最简单的地方;但对于玩家,这却是最重要的,一般玩家不会关心你是怎么实现的,他所关心的是画面的美观,漂亮,是不是能让人赏心悦目。

.2获取图片位置的思路

通过数组从图片库随即获取规定个数的图片,随机分布在画布上。图片个数一定是个偶数个。

4.1.3 路径判断的思路

连连看所要求的是:

1:两个目标是相同的

2:两个目标之间连线的折点不超过两个。(连接线由x轴和y轴的平行线组成)那么分析一下连接的情况可以看到,一般分三种情况

1:直线相连2:一个折点3:两个折点;

可以发现,如果有折点,每个折点必定有且至少有一个坐标(x或者y)是和其中一个目标点是相同的,也就是说,折点必定在两个目标点所在的x方向或y方向的直线上。

所以设计思路就是:

假设目标点p1,p2,如果有两个折点分别在z1,z2那么,所要进行的是

1:如果验证p1,p2直线连线,则连接成立

2:搜索以p1,p2的x,y方向四条直线(可能某两条直线会重合)上的有限点,每次取两点作为z1,z2,验证p1到z1/z1到z2/z2到p2是否都能直线相连,是则连接成立。

4.1.4其他问题的思路

其他功能将在后面的具体各个部分的设计过程当中分别进行介绍。

4.2主界面的设计

由于这个程序的界面并不是很复杂,所以用到的控件也不多,主要核心内容还是后台的代码设计。图片的随机生成主要是用到一个random()函数将随机数赋值给flag[ ]数组中的每个元素,然后根据数组元素值,来显示图片。

4.2.1界面的设计

1、色彩上:总结人们的视觉习惯和色彩对眼睛的健康影响,决定对于画布采用黑色背景,神秘而大方;右边的控制区采用天蓝色,配合左边纯黑的背景,就像黑夜中的蓝天,纯洁而大方。

2、功能上:背景就是窗体,右侧是一个groupbox控件,用来放置控制按钮,下方是一个grogressbar控件,用来显示时间条。

4.2.2图片的随机生成

实现这个功能要分很多个步骤:

1. 程序运行时即载入游戏需要的N张图片,默认情况下图片种类是18,重复数是4(重复数必须是偶数),并且可以选择是否重列。通过一个循环,加载随机的选择N种图片。具体载入图片的代码如下:

private void InteBmp(int maxnum)

{

g_g=this.Creatphics()

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

for(int j=0j<WAPHEIGHTj++)

gamp[i,j]=0

IniteRandoMap(ref gamp,maxnum)

AI=new Kernal(ref gmap)

for(int i=0i<maxnumi++)

{

ResourceManager rm=new ResourceManager(“LLK data”,Assembly,GetExecut ingAssembly() )

img[i]=(Image)rm.GetObject(i.ToString( )+”.bmp”)

//img[i]=(Image)Bitmap.FormFile(“Images\\”+(i+1). ToString( )+”.bmp”)

}

for(int i=0i<6i++)

{

//bombimg[i]=(Image)Bitmap.FromFile(“Image\\B”+(i++). ToString( )+”.bmp”).

}

}

2. 当确认游戏开始时,通过画图过程完成图片生成,画图的过程代码如下

private bool CheckWin(ref int[,]map)

{

Bool Win=true

for(int i=0i0)

{

for(int i=0i<multipici++)

{

Int xrandom=r.Next(19)

Int yrandom=r,Next(11)

If(map[xrandom,yrandom]==0)

{

map[xrandom,yrandom]=num

}

else

i--

}

num--

}

}

private void FreshMap(ref int[,]map)

{

random r=new Random();

for (int i=0i<MAPWIDTHi++)

for(int j=0j<MAPHEIGHTj++)

{

if(gmap[i,j]!=0)

{

int x=r.Next(19)

int y=r.Next(11)

int temp=gmap[x,y]

gmap[x,y]=gmap[i,j]

gmap[i,j] =temp

}

TransportMap(ref gmap)

}

private void TransportMap(ref int[,]map)

{

for (int i=0i<MAPWIDTHi++)

for(int j=0j<MAPHEIGHTj++)

{

AI.GiveMapValue(i,j,map[i,j])

}

}

//在指定位置画指定图

private void Draw(Graphics g,Image scrImg,int PicxX,int PicV)

{

g.DrawImage(scrImg,new Point(PicX,PicV))

}

private void Forml_Paint(object sender,PaintEventArg e)

{

g_g.DrawLine(new.Pen(newSolidBrush(Color.DeepSkyBlue),5),0,11*34+5,19*34

,11*34+5)

If(bStart)

{

For(int i=0i209)

{

MessageBox.Show(“游戏区域内最多只有209个孔,您选的数据太多!请重新选!”)

textBox1.Text=”18”

textBox2.Text=”4”

return

}

IniteBmp(picnum)

If(bStart)

{

MessageBox.Show(“游戏已在运行!”)

return

}

else

{

bStart=true

this.Invalidate()

music.Play(“Sounds\\ bg-03.mid”)

}

}

重新实现代码如下:

Private void RefreshMap(ref int[,] map)

{

if ( int i=0i<MAPWIDTHi++)

for(int j<MAPHEIGHTj++)

{

If(gmap[I,j]!=0)

{

Draw(g_g,img[gmap[I,j]-1],i*PICWIDTH,j*PICHEIGHT)

}

}

}

private void FreshMap(ref int[,] map)

{

Random r=new Random()

for(int i=0j<MAPWIDTHi++)

for(int j=0j<MAPHEIGHTj++)

{

if(gmap[I,j]!=0)

{

int x=r,Nex(19)

int y=r,Nex(11)

int temp=gmap[x,y]

gmap[x,y]=gmap[I,j]

gmap[I,j]=temp

}

}

TransportMap(ref gmap)

}

Private void button2_Click(object sender,EventArgs e)

{

Refreshplayer.Play()

FreshMap(ref gmap)

This.Invalidate()

}

4.2.4得分设置

本游戏一改前人风格,采用全新计分方式,使人们在寻找相同图片的同时还注意路径的选择,更增加了游戏的趣味性,具体规则:直连得10分,一个拐点的20,两个拐点得40.用一个Label控件存储得分。

实现代码:

Switch(corner[2].X)

{

Case1;

Score+=20//一个拐点加20;

g_g.DrawLine(pen,new Point(p1.X*31+15,p1.Y*34+17),new

Point(corner[0].X*31+15,corner[0],Y*34+17)),

g_g.DrawLine(pen,new point(p2.X*31+15,p2.Y*34+17),new

Point(corner[0].X*31+15,corner[0],Y*34+17))

Thread.Sleep(100)

EraseBlock(g_g,p1,p2)

g_g.DrawLine(bkpen,new Point(p1.X*31+15,p1.Y*34+17)new

Point(corner[0].X*31+15,corner[0],Y*34+17)

g_g.DrawLine(bkpen,new Point(p1.X*31+15,p2.Y*34+170new

Point(corner[0].X*31+15,corner[0],Y*34+17)

break

case 2

score+=40

Point[ ]ps={new Point(p1.X*31+15,p1.Y*34+17),new<br/>Point(corner[1].X*31+15,corner[1],Y*34+17),new<br/>Point(corner[0].X*31+15,corner[0],Y*34+17),newPoint(p2.X*31+15,p2.Y*34+17))<br/>g_g.DrawLine(pen,ps)<br/> Thread.Sleep(100)<br/> EraseBlock(g_g,p1,p2)<br/>//foreach(Point mp in ps)<br/>//{<br/> //MessageBox.Box.Show(“+mp.X.ToString( )+”,”+mp.Y.ToString( )+”)”))<br/>//}

break

case 0

score+=10

g_g.DrawLine(pen,ps)Point(corner[0].X*31+15,corner[0],Y*34+17),newPoint(p2.X*31+15,p2.Y*34+17))

Thread.Sleep(100)

EraseBlock(g_g,p1,p2)

g_g.DrawLine(pen,ps)Point(corner[0].X*31+15,corner[0],Y*34+17),newPoint(p2.X*31+15,p2.Y*34+17))

break

default:break

}

//RefreshMap(ref gmap)

Label5.Text=score.ToString( )

下面还有

彪壮的鞋子
稳重的小蜜蜂
2026-04-22 03:20:38
其实只要明白一点. 画面上显示的都是程序画上去的.

那么在你消除图片之前, 在图片上去再画一条连线. 一般 连连看设计可以看成是一个二维数组. 生成连线部分可以看成是一个简单的自动寻路过程. 可以使用A*算法.

当然也可以自己去写连线的寻路算法,应该不算很难.

高挑的绿茶
内向的棒棒糖
2026-04-22 03:20:38
public void reload(){ 声明一个公有的方法(这里的public就是公有的意思)方法没有返回值(这里的void就是返回值为空的意思)方法的名字是reload

int save[] = new int[30]声明一个数组名字就save最多能放30个元素

int n=0,cols,rows 声明一个n值为0 声明一个cols没有赋值 声明一个rows没有赋值

int grid[][]= new int[8][7]声明一个2维数组叫grid 横向放8个元素 纵向放7个元素 一共可以放7乘8 56个元素

for(int i=0i<=6i++) {

for(int j=0j<=5j++) {

if(this.grid[i][j]!=0) {

save[n]=this.grid[i][j]n++

}

}

}

这两个for循环里的意思是 判断第i行第j列的值如果不等于零 那么就将这个值赋给save[n] 并将n的值+1 for(int i=0i<=6i++)这句话定义了有7行 for(int j=0j<=5j++) 这句话定义了有6列

个人感觉这段程序有问题 6乘以7等于42 但是save里面最多放30个元素

这个可以运行吗...

英俊的小甜瓜
秀丽的蜡烛
2026-04-22 03:20:38
条件一:

按鼠标右键圈选起始问题,按左键代表所要圈选的答案,并在问题与答案间画一联机

条件二:

至少要有3个配对问题,且答完3个配对问题后,使用按钮判段最后是否为正确配对

引用

害怕的手套
阔达的糖豆
2026-04-22 03:20:38
主要在于算法的实现

如何判断两个对象是一样的?(即同样图案的方块)

怎样连接两个点?

连线如何转弯?

是否遇到障碍物?如何避开?

怎样找到最佳路径?怎样判断无法连线的情况?

其实就是个算法

******************

设计思想已经说了,就是个算法,这个游戏的核心就是算法,你可以上网看看相关的算法,一看就明白了,其他的都好实现

像类似于这种简单的游戏,除了事件监听就是算法,UI谁都会设计,如果你想明白前两种,你的有就能完成70%了

糟糕的音响
乐观的中心
2026-04-22 03:20:38
连连看java源代码

import javax.swing.*

import java.awt.*

import java.awt.event.*

public class lianliankan implements ActionListener

{

JFrame mainFrame//主面板

Container thisContainer

JPanel centerPanel,southPanel,northPanel//子面板

JButton diamondsButton[][] = new JButton[6][5]//游戏按钮数组

JButton exitButton,resetButton,newlyButton//退出,重列,重新开始按钮

JLabel fractionLable=new JLabel("0")//分数标签

JButton firstButton,secondButton//分别记录两次被选中的按钮

int grid[][] = new int[8][7]//储存游戏按钮位置

static boolean pressInformation=false//判断是否有按钮被选中

int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV//游戏按钮的位置坐标

int i,j,k,n//消除方法控制

public void init(){

mainFrame=new JFrame("JKJ连连看")

thisContainer = mainFrame.getContentPane()

thisContainer.setLayout(new BorderLayout())

centerPanel=new JPanel()

southPanel=new JPanel()

northPanel=new JPanel()

thisContainer.add(centerPanel,"Center")

thisContainer.add(southPanel,"South")

thisContainer.add(northPanel,"North")

centerPanel.setLayout(new GridLayout(6,5))

for(int cols = 0cols <6cols++){

for(int rows = 0rows <5rows++ ){

diamondsButton[cols][rows]=new JButton(String.valueOf(grid[cols+1][rows+1]))

diamondsButton[cols][rows].addActionListener(this)

centerPanel.add(diamondsButton[cols][rows])

}

}

exitButton=new JButton("退出")

exitButton.addActionListener(this)

resetButton=new JButton("重列")

resetButton.addActionListener(this)

newlyButton=new JButton("再来一局")

newlyButton.addActionListener(this)

southPanel.add(exitButton)

southPanel.add(resetButton)

southPanel.add(newlyButton)

fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText())))

northPanel.add(fractionLable)

mainFrame.setBounds(280,100,500,450)

mainFrame.setVisible(true)

}

public void randomBuild() {

int randoms,cols,rows

for(int twins=1twins<=15twins++) {

randoms=(int)(Math.random()*25+1)

for(int alike=1alike<=2alike++) {

cols=(int)(Math.random()*6+1)

rows=(int)(Math.random()*5+1)

while(grid[cols][rows]!=0) {

cols=(int)(Math.random()*6+1)

rows=(int)(Math.random()*5+1)

}

this.grid[cols][rows]=randoms

}

}

}

public void fraction(){

fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText())+100))

}

public void reload() {

int save[] = new int[30]

int n=0,cols,rows

int grid[][]= new int[8][7]

for(int i=0i<=6i++) {

for(int j=0j<=5j++) {

if(this.grid[i][j]!=0) {

save[n]=this.grid[i][j]

n++

}

}

}

n=n-1

this.grid=grid

while(n>=0) {

cols=(int)(Math.random()*6+1)

rows=(int)(Math.random()*5+1)

while(grid[cols][rows]!=0) {

cols=(int)(Math.random()*6+1)

rows=(int)(Math.random()*5+1)

}

this.grid[cols][rows]=save[n]

n--

}

mainFrame.setVisible(false)

pressInformation=false//这里一定要将按钮点击信息归为初始

init()

for(int i = 0i <6i++){

for(int j = 0j <5j++ ){

if(grid[i+1][j+1]==0)

diamondsButton[i][j].setVisible(false)

}

}

}

public void estimateEven(int placeX,int placeY,JButton bz) {

if(pressInformation==false) {

x=placeX

y=placeY

secondMsg=grid[x][y]

secondButton=bz

pressInformation=true

}

else {

x0=x

y0=y

fristMsg=secondMsg

firstButton=secondButton

x=placeX

y=placeY

secondMsg=grid[x][y]

secondButton=bz

if(fristMsg==secondMsg &&secondButton!=firstButton){

xiao()

}

}

}

public void xiao() { //相同的情况下能不能消去。仔细分析,不一条条注释

if((x0==x &&(y0==y+1||y0==y-1)) || ((x0==x+1||x0==x-1)&&(y0==y))){ //判断是否相邻

remove()

}

else{

for (j=0j<7j++ ) {

if (grid[x0][j]==0){ //判断第一个按钮同行哪个按钮为空

if (y>j) { //如果第二个按钮的Y坐标大于空按钮的Y坐标说明第一按钮在第二按钮左边

for (i=y-1i>=ji-- ){ //判断第二按钮左侧直到第一按钮中间有没有按钮

if (grid[x][i]!=0) {

k=0

break

}

else{ k=1} //K=1说明通过了第一次验证

}

if (k==1) {

linePassOne()

}

}

if (y<j){ //如果第二个按钮的Y坐标小于空按钮的Y坐标说明第一按钮在第二按钮右边

for (i=y+1i<=j i++ ){ //判断第二按钮左侧直到第一按钮中间有没有按钮

if (grid[x][i]!=0){

k=0

break

}

else { k=1}

}

if (k==1){

linePassOne()

}

}

if (y==j ) {

linePassOne()

}

}

if (k==2) {

if (x0==x) {

remove()

}

if (x0<x) {

for (n=x0n<=x-1n++ ) {

if (grid[n][j]!=0) {

k=0

break

}

if(grid[n][j]==0 &&n==x-1) {

remove()

}

}

}

if (x0>x) {

for (n=x0n>=x+1 n-- ) {

if (grid[n][j]!=0) {

k=0

break

}

if(grid[n][j]==0 &&n==x+1) {

remove()

}

}

}

}

}

for (i=0i<8i++ ) { //列

if (grid[i][y0]==0) {

if (x>i) {

for (j=x-1j>=i j-- ) {

if (grid[j][y]!=0) {

k=0

break

}

else { k=1}

}

if (k==1) {

rowPassOne()

}

}

if (x<i) {

for (j=x+1j<=ij++ ) {

if (grid[j][y]!=0) {

k=0

break

}

else { k=1}

}

if (k==1) {

rowPassOne()

}

}

if (x==i) {

rowPassOne()

}

}

if (k==2){

if (y0==y) {

remove()

}

if (y0<y) {

for (n=y0n<=y-1 n++ ) {

if (grid[i][n]!=0) {

k=0

break

}

if(grid[i][n]==0 &&n==y-1) {

remove()

}

}

}

if (y0>y) {

for (n=y0n>=y+1 n--) {

if (grid[i][n]!=0) {

k=0

break

}

if(grid[i][n]==0 &&n==y+1) {

remove()

}

}

}

}

}

}

}

public void linePassOne(){

if (y0>j){ //第一按钮同行空按钮在左边

for (i=y0-1i>=j i-- ){ //判断第一按钮同左侧空按钮之间有没按钮

if (grid[x0][i]!=0) {

k=0

break

}

else { k=2} //K=2说明通过了第二次验证

}

}

if (y0<j){ //第一按钮同行空按钮在与第二按钮之间

for (i=y0+1i<=j i++){

if (grid[x0][i]!=0) {

k=0

break

}

else{ k=2}

}

}

}

public void rowPassOne(){

if (x0>i) {

for (j=x0-1j>=i j-- ) {

if (grid[j][y0]!=0) {

k=0

break

}

else { k=2}

}

}

if (x0<i) {

for (j=x0+1j<=i j++ ) {

if (grid[j][y0]!=0) {

k=0

break

}

else { k=2}

}

}

}

public void remove(){

firstButton.setVisible(false)

secondButton.setVisible(false)

fraction()

pressInformation=false

k=0

grid[x0][y0]=0

grid[x][y]=0

}

public void actionPerformed(ActionEvent e) {

if(e.getSource()==newlyButton){

int grid[][] = new int[8][7]

this.grid = grid

randomBuild()

mainFrame.setVisible(false)

pressInformation=false

init()

}

if(e.getSource()==exitButton)

System.exit(0)

if(e.getSource()==resetButton)

reload()

for(int cols = 0cols <6cols++){

for(int rows = 0rows <5rows++ ){

if(e.getSource()==diamondsButton[cols][rows])

estimateEven(cols+1,rows+1,diamondsButton[cols][rows])

}

}

}

public static void main(String[] args) {

lianliankan llk = new lianliankan()

llk.randomBuild()

llk.init()

}

}

//old 998 lines

//new 318 lines

参考资料:http://zhidao.baidu.com/question/36439800.html?fr=qrl3

勤劳的蜗牛
醉熏的冬天
2026-04-22 03:20:38
我国南北走向的横断山区,坡度大,水土易流失,适宜发展林业;位于内蒙古的呼伦贝尔草原,降水少,适宜牧草生长,可以发展畜牧业;珠江三角洲地区地形平坦,水源充足,适宜发展种植业,是我国粮食集中产区;洞庭湖我国第二大淡水湖,水域广阔,适宜发展渔业.

故答案为:

帅气的万宝路
丰富的服饰
2026-04-22 03:20:38

【导读】:春夏之际,各色各类的美衣齐齐上阵,你想好了这个季节穿什么吗?接下来就由秀美我为各位mm推荐一下当前的热点美衣吧!

上衣印染着娇媚的玫瑰花朵,领口乖巧的设计,与上身拼接在一起的连体卡其色短裤,整件衣服看起来可爱范儿十足。另外这种设计的衣服上身效果也十分不错,喜欢田园风格的mm可以试试这款。

<

素雅的颜色,清新宜人,领口和裙䙓上蕾丝的搭配,增添了浓郁的少女气息。在春季,这件衣服加上一件浅色系的开衫,想必是不错的搭配。夏季的时候单穿也很夺目。

圆领条纹T恤,军蓝色的短裙,比较简单、休闲的搭配。整套衣服的颜色较适合皮肤白皙的mm,夏日这样穿不仅凉爽、清透,而且美感十足。

这款衣服松身的设计穿着舒适、轻松,条纹元素的加入,增添了整体的醒目感。穿上它,甜美可人,不想成为焦点都难。

简洁的无袖薄衫,版型比较宽松,中央的猫头鹰图案,显得复古而特别。比较偏向个性化风格的mm可以在炎炎夏日为自己增添一件这样的美衣。