在此新春佳节之际,我谨代表我自己发一个连连看小算法给大家.
aide吧
全部回复
仅看楼主
level 1
kyo_008 楼主
仅供参考,为了简单使用数字,xml文件↓
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:background="#DDDDDD"
android:orientation="vertical">
<LinearLayout
android:layout_height="1254px"
android:layout_width="1004px"
android:orientation="horizontal"
android:id="@+id/mainLinearLayout1"
android:background="#AAAAAA"/>
<Button
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="开始"
android:onClick="oc"/>
</LinearLayout>
2019年01月01日 11点01分 1
level 1
kyo_008 楼主
居然没被删,java代码↓
import android.app.*;
import android.os.*;
import android.widget.*;
import android.view.*;
import android.content.*;
import android.graphics.*;
import java.util.*;
import android.view.View.*;
public class MainActivity extends Activity
{
LinearLayout ll;
View vv;
int a,b;
List<Integer>l1;
int[][]ss,sss;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ll=(LinearLayout)findViewById(R.id.mainLinearLayout1);
ss=new int[10][8];
sss=new int[10][8];
l1=new ArrayList<>();
a=20;
b=20;
vv=new Myview(this);
ll.addView(vv);
ll.setOnTouchListener(new Mytou());
}
class Myview extends View
{
Paint p;
public Myview(Context con)
{
super(con);
p=new Paint();
p.setStrokeWidth(4);
}
@Override
public void draw(Canvas canvas)
{
p.setTextSize(100);
for(int i=0;i<10;i++)
for(int ii=0;ii<8;ii++)
{
if(sss[i][ii]==1)
{
p.setColor(0x7700ff00);
canvas.drawRect(125*ii+2,125*i+2,125*ii+127,125*i+127,p);
}
if(sss[i][ii]==3)
{
p.setColor(0xffaaaaaa);
canvas.drawRect(125*ii+2,125*i+2,125*ii+127,125*i+127,p);
}
p.setColor(0xff000000);
canvas.drawText(ss[i][ii]+"",ii*125
+3
5,i*125+102,p);
if(sss[i][ii]==2)
{
p.setColor(0xffffffff);
canvas.drawRect(125*ii+2,125*i+2,125*ii+127,125*i+127,p);
}
}
p.setColor(0xffffffff);
for(int i=0;i<9;i++)
canvas.drawLine(125*i+2,2,125*i+2,1252,p);
for(int i=0;i<11;i++)
canvas.drawLine(2,125*i+2,1252,125*i+2,p);
}
}
class Mytou implements OnTouchListener
{
int x,y;
@Override
public boolean onTouch(View p1, MotionEvent p2)
{
if(p2.getAction()==p2.ACTION_UP)
{
x=(int)(p2.getX()-2)/125;
y=(int)(p2.getY()-2)/125;
if(sss[y][x]!=2)
{
if(a==20&&b==20)
{
sss[y][x]=1;
a=x;
b=y;
}
else if(a==x&&b==y)
{
sss[y][x]=3;
a=20;
b=20;
}
else
{
if(ss[b][a]==ss[y][x]&&xiaochu(a,b,x,y))
{
sss[y][x]=2;
sss[b][a]=2;
a=20;
b=20;
}
}
vv.postInvalidate();}
}
return true;
}
}
public boolean xiaochu(int a, int b, int c, int d)
{
if(panduan(a,b,c,d))
return true;
if(sss[b][c]==2&&panduan(a,b,c,b)&&panduan(c,b,c,d))
return true;
if(sss[d][a]==2&&panduan(a,b,a,d)&&panduan(a,d,c,d))
return true;
for(int i=0;i<8;i++){
if(sss[b][i]==2&&panduan(i,b,a,b))
{
if(sss[b][c]==2&&panduan(i,b,c,b)&&panduan(c,b,c,d))
return true;
if(sss[d][i]==2&&panduan(i,b,i,d)&&panduan(i,d,c,d))
return true;
}
}
for(int i=0;i<10;i++)
{
if(sss[i][a]==2&&panduan(a,b,a,i))
{
if(sss[i][c]==2&&panduan(a,i,c,i)&&panduan(c,i,c,d))
return true;
if(sss[d][a]==2&&panduan(a,i,a,d)&&panduan(a,d,c,d))
return true;
}
}
return false;
}
public void oc(View v){
init();
vv.postInvalidate();
}
public void init()
{
Random ran=new Random();
sss=new int[10][8];
for(int i=0;i<40;i++)
{
l1.add(ran.nextInt(10));
}
l1.addAll(l1);
Collections.shuffle(l1);
for(int i=0;i<10;i++)
for(int ii=0;ii<8;ii++)
ss[i][ii]=l1.get(i*8+ii);
}
public boolean panduan(int a, int b, int c, int d)
{
if(a!=c&&b!=d)
return false;
if(a==c)
{
if(Math.abs(b-d)==1)
return true;
if(b>d)
for(int i=b-1;i>d;i--)
{
if(sss[i][a]!=2)
return false;
}
if(b<d)
for(int i=b+1;i<d;i++)
{
if(sss[i][a]!=2)
return false;
}
}
if(b==d)
{
if(Math.abs(a-c)==1)
return true;
if(a<c)
for(int i=a+1;i<c;i++)
{
if(sss[b][i]!=2)
return false;
}
if(a>c)
for(int i=a-1;i>c;i--)
{
if(sss[b][i]!=2)
return false;
}
}
return true;
}
}
2019年01月01日 11点01分 2
初始化函数init()漏了一句 l1=new ArrayList<>(); 否则第二次之后随机出来的数字不是偶数,消不掉.
2019年01月01日 11点01分
level 1
kyo_008 楼主
看来吧主鬼混去了,由于初始化完全使用随机,理论上不保证一定有解,但由于格子太多数字种类太少,难度太低,实际上基本不会碰到无解。
2019年01月01日 11点01分 3
level 12
[真棒][真棒][真棒]
2019年01月01日 14点01分 4
level 15
新年好,我基本偶尔看看贴吧
2019年01月02日 05点01分 5
1