我无聊想做一个拼图游戏,但不知道怎么打乱。
bat吧
全部回复
仅看楼主
level 14
John▫Aº 楼主
RT,这就是界面,但是打乱的算法是什么啊?
2013年07月18日 06点07分 1
level 12
用%random%
2013年07月18日 06点07分 2
+1
2013年07月18日 06点07分
不好,我做的投票器4选项就用了10几个if(一个里面套一两个),9个数为避免重复简直要200个了
2013年07月18日 07点07分
你玩过这种拼图么,九个格子,缺一块,可以移动,随意打乱是拼不好的。
2013年07月18日 08点07分
回复 敖文轩321 :随意打乱可以拼好吧
2013年07月18日 08点07分
level 13
布吉岛
2013年07月18日 09点07分 3
level 13
如果对打乱的要求比较高,有一定的难度。如果只是要求随机打乱,可以通过执行一定次数的随机移动来完成。
伪代码:
for(i=1; i<=10; ++i)
{
  随机生成“上移、下移、左移、右移”四个操作中的一个
  if 该操作可以执行
  执行该操作
   //随机生成的操作可能执行不了,例如在1楼图中,下移和右移空白区是不行的
}
2013年07月18日 11点07分 4
只要将随机移动的步骤反向执行,就可以将拼图还原。所以通过这种方法打乱的拼图是一定可以还原的。但这种方法的缺点是无法保证“打乱程度”,甚至有可能打乱后拼图没有变化,不过概率不高。
2013年07月18日 11点07分
你这是c啊,你不知道这是什么地方么?这是地球。。。[汗]所以不要用c,而且我要的就是算法,不是这种无目的地乱弄一气。。。
2013年07月19日 02点07分
回复 敖文轩321 :首先,我写的是“伪代码”,伪代码不固定于任何一种语言。其次,我给出的就是算法,目的是在一定程度上将拼图打乱。算法可由伪代码、自然语言、流程图等不同方法描述。
2013年07月19日 04点07分
我只听过自然语言和流程图
2013年07月19日 10点07分
level 12
%random%
2013年07月18日 11点07分 5
又来一个不看贴就回复的。。。
2013年07月19日 02点07分
回复 敖文轩321 :总比看贴不回好点
2013年07月20日 01点07分
level 12
没有你想得那么麻烦
用%random%随机选取空白方块周围的一个方块,再把这个方块移动到空白方块的位置上不就可以了吗。。。。。。。。
2013年07月19日 03点07分 6
我觉得这样效率不高,打乱效果也没有保证,好像有算法可以直接得出打乱后的样子。
2013年07月19日 03点07分
回复 敖文轩321 :效率其实还可以的。。。。
2013年07月19日 04点07分
level 12
楼主要是不理解,我可以写出来
2013年07月19日 03点07分 7
level 12
最简单的:
set /a xxx=%random%%5
if "%xxx%"=="4" set 位置1=1 & set 位置1=1 & ……
if "%xxx%"=="3" set 位置1=2 & set 位置2=1 & ……
…………
2013年07月19日 04点07分 8
level 12
@echo off
setlocal enabledelayedexpansion
set "a1=1"
set "a2=2"
set "a3=3"
set "a4=4"
set "a5=5"
set "a6=6"
set "a7=7"
set "a8=8"
set "a9= "
set "b1=4,2"
set "b2=5,3,1"
set "b3=6,2"
set "b4=7,5,1"
set "b5=8,6,4,2"
set "b6=9,5,3"
set "b7=8,4"
set "b8=9,7,5"
set "b9=8,6"
set "c1=2"
set "c2=3"
set "c3=2"
set "c4=3"
set "c5=4"
set "c6=3"
set "c7=2"
set "c8=3"
set "c9=2"
::打乱20次
for /l %%a in (1,1,20) do for /l %%b in (1,1,9) do if "!a%%b!"==" " set tempa=!c%%b! & set /a temps=!random!%%!tempa!+1 & call:call !temps! "!b%%b!" %%b
echo.┏━┳━┳━┓
echo.┃!a1! ┃!a2! ┃!a3! ┃
echo.┣━╋━╋━┫
echo.┃!a4! ┃!a5! ┃!a6! ┃
echo.┣━╋━╋━┫
echo.┃!a7! ┃!a8! ┃!a9! ┃
echo.┗━┻━┻━┛
pause
exit
:call
for /f "tokens=%1 delims=," %%c in (%2) do set "a%3=!a%%c!" & set "a%%c= "
goto:eof
2013年07月19日 05点07分 9
level 1
诶大家,不是简单随机,有些打乱是拼不出结果的
2017年07月04日 02点07分 11
level 11
[滑稽]纯随机
先random
然后set
然后在random第二格
if有没有和第一个一样
random第三格
if有没有和第一格和第二格一样
一直到第九个就好了
2017年07月08日 07点07分 12
level 1
请问现在有人解决了这问题了吗?随机打乱的话会生成无解的情况,那么要怎样才能是有解的情况呢?我在其它地方看到别人说什么数学高等代数里的用逆序的知识可解决这问题,可我就是不理解
2017年12月11日 17点12分 13
最简单的方法就是随机操作,就像魔方打乱方式是生成一串打乱公式一样。
2017年12月11日 23点12分
level 7
假数组a=range(1,8)
for i in a:
a[i]=a[choice(range(1,8))]
2017年12月16日 07点12分 15
level 1
[滑稽]
@echooff&setlocal enabledelayedexpansion
set "num=12345678 "
set n=9
for /l %%i in (1,1,%n%) do (
set/a r=!random!%%n,m=r+1,n-=1
for /f "tokens=1,2" %%a in ("!r! !m!") do (
set "#%%i=!num:~%%a,1!"
set "num=!num:~,%%a!!num:~%%b!"
))
echo.┏━┳━┳━┓
echo.┃!#1! ┃!
#2! ┃!#
3! ┃
echo.┣━╋━╋━┫
echo.┃!
#4! ┃!#
5! ┃!#6! ┃
echo.┣━╋━╋━┫
echo.┃!#7! ┃!
#8! ┃!#
9! ┃
echo.┗━┻━┻━┛
pause>nul
cls
%0
2018年01月05日 10点01分 17
level 7
%random%
2018年01月05日 11点01分 18
level 7
用%random%
2018年01月08日 10点01分 19
1