vivo手机怎么拼图

int i, k, m, l;

Vivo 手机拼图的方法如下:

origin拼图_origin拼图后怎么调整间距origin拼图_origin拼图后怎么调整间距


origin拼图_origin拼图后怎么调整间距


一、工具/};我们可以通过 e.offsetX 、 e.offsetY 来获取触控点在 canvas 中的位置。原料:

Vivo V60、Android 10.18.6、Origin OS 3.0、Vivo 拼图功能。

二、具体步骤:

1、打开相册 App,长按需要拼图的照片。

2、点击下方的“创作”选项,之后再点击“拼图”选项。

3、选择拼图样式,点击“保存”即可。

33拼图游戏算法实现(C++的代码)

我这个程序是求还原矩阵所需的最少步数,你只要稍作修改就可以了。把路径记录下来输出。

#incl}return true;ude

#include

#include

#include

using namespace std;

struct Board

{int [5][5];

string step;

};

Board origin;

bool st[362880];

int direction[4][2] = {-1, 0, 1, 0, 0, 1, 0, -1};//swap 0 with dowm, up, right, left

void Reset()

{int i, j;

memset(origin., 255, sizeof(origin.));

for (i=1; i<4; i++)

{for (j=1; j<4; j++)

{origin.[i][j] = (i-1)3 + j;

}}

}bool Equal(Board b1, Board b2)

{int i, k;

for (i=1; i<4; i++)

{for (k=1; k<4; k++)

{if (b1.[i][k] != b2.[i][k])

{return false;

}}

}int main()

{int cases;

Board current, dest;

Reset();

scanf("%d", &cases);

for (i=0; i

for (m=1;origin.[3][3] = 0; m<4; m++)

{for (k=1; k<4; k++)

}}

if(Equal(origin, dest))

{printf("0n");

continue;

}que.push(origin);

while (false == que.empty())

{current = que.front();

que.pop();

int len = current.step.length();

if (len == 5)

{break;

}for (m=1; m<4; m++)

{for (k=1; k<4; k++)

{if (0 == current.[m][k])

{goto out;

}}

}out:

for (l=0; l<4; l++)

{if (0==l && current.step[len-1] == '1')

{continue;

}if (1==l && current.step[len-1] == '0')

{continue;

}if (2==l && current.step[len-1] == '3')

{continue;

}if (3==l && current.step[len-1] == '2')

{continue;

}if (current.[m+direction[l][0]][k+direction[l][1]]>0)

{swap(current.[m][k], current.[m+direction[l][0]][k+direction[l][1]]);

current.step += l + '0';

if (Equal(current, dest))

{goto print;

}else

{que.push(current);

current.step.resize(current.step.length()-1);

swap(current.[m][k], current.[m+direction[l][0]][k+direction[l][1]]);

}}

}}

print:

}return 0;

}

vivo手机怎么拼图

Vivo 手机拼图的方法如下:

一、工具/原料:

Vivo V60、Android 10.18.6、Origin OS 3.0、Vivo var list2 = [2, 0, 5, 6, 8, 7, 3, 1, 4];拼图功能。

二、具体步骤:

1、打开相册 App,长按需要拼图的照片。

2、点击下方的“创作”选项,之后再点击“拼图”选项。var rect = rectForPosition(ition);

3、选择拼图样式,点击“保存”即可。

如何利用原生的JaScript来实现一个简单的拼图小游戏

printf("%dn", current.step.length());

本篇文章的内容是关于如何利用原生的 JaScript来实现一个简单的拼图小游戏,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

// 获取空位位置

一、游戏的基础逻辑

想用一门语言来开发游戏,必须先了解如何使用这门语言来实现一些基础逻辑,比如图像的绘制、交互的处理、定时器等。

1、图形绘制图形绘制是一切的基础,这里使用 JaScript 在 canvas 上进行绘制。即先在 html 中创建 canvas 元素,然后在 JaScript 中,通过 id 拿到这个元素,并且通过 canvas 拿到对应的上下文环境 context ,为后续的绘图做好准备。

var background = document.getElementById("background");

var context = background.getContext('2d');通过 context 的 drawImage 方法可以绘制,这里进行了相应的封装:

注:这里要等加载完毕后再进行绘制,即在 onload 中去调用 drawImage 方法,否则会绘制失败。

var drawImageItem = function(index, ition) {

var img = new Image();

img.onload = () => {

context.drawImage(img, rect[0], rect[1], rect[2], rect[3]);

}}在绘制之后,我们还需要去动态刷新视图,否则 canvas 就只是一张静态的。如果是简单的图形刷新,只需在原来的位置重新绘制,进行覆盖即可。但有时候我们只需要将原来已存在的图形清除掉,而不需要绘制新图案。比如在拼图游戏中,将一个方块移动到另一个位置后,需要清空原来的位置。

通过 context 的 clearRect 方法可以达到清除的目的。以下是清除 canvas 的某个区域的代码:

var originRect = rectForPosition(origin);

context.clearRect(originRect[0], originRect[1], originRect[2], originRect[3]);2、处理有了图形的绘制后,我们还需要处理玩家的输入,然后根据输入,来决定什么时候刷新视图。输入可以分为 3 种:在手机上有触屏;在 PC 上,有鼠标和键盘。

JaScript 中对触屏和鼠标点击的是一样的,都是通过 canvas 的 onclick 进行回调,具体如下:

// 屏幕点击

background.onclick = function(e) {

注: canvas 的坐标原点在左上角,即左上角的坐标是 (0, 0) 。

键盘的按键点击则是通过 document 的 onkeyup 、 onkeydown 等进行回调。 onkeyup 是指按键的抬起, onkeydown 是指按键的按下。我们可以通过 keyCode 知道当前具体是哪一个按键,然后根据不同的按键去处理不同的逻辑,如下:

if (nt.keyCode == '37') { // 左

// do soming

// do soming

} else if (nt.keyCode == '39') { // 右

// do soming

} else if (nt.keyCode == '40') { // 下

// do soming

}3、定时器有时候,除了在玩家输入的时候需要去刷新视图,还需要每隔一段时间定时去刷新视图。比如在一个贪吃蛇游戏中,就需要每隔一段时间就去刷新蛇的位置。

这个时候我们就需要一个定时器,让它每隔一段时间去执行一段刷新视图的代码。我们通过 setInterval 方法来实现定时器功能:

setInterval("run()", 100);上面这段代码表示每隔 100 毫秒,去执行一次 run 方法。

二、拼图的基础逻辑有了游戏的基础逻辑,下面来看一下如何实现拼图的逻辑。

1、生成随机序列因为不是任意序列都可以通过平移的方式来还原,所以我们不能简单地生成一个随机序列。比如 1、0、2、3、4、5、6、7、8 这个序列,无论怎么平移,都不可能还原。

这里采取的做法是:预先设置了 4 个可还原的序列,先从这 4 个序列中随机选取一个,然后再对序列进行模拟平移若干步骤。以此来尽可能地保证初始序列的多样性,也保证了序列的可还原性。具体代码如下:

var setupRandomPosition = function() {

var list1 = [4, 3, 2, 8, 0, 7, 5, 6, 1];

var list3 = [3, 7, 2, 4, 1, 6, 8, 0, 5];

var list4 = [3, 2, 4, 1, 7, 6, 5, 0, 8];

var lists = [list1, list2, list3, list4];

imageIndexForPosition = lists[parseInt(Math.random() 4)];

var emptyPosition = 0;

for (var i = imageIndexForPosition.length - 1; i >= 0; i--) {

if (imageIndexForPosition[i] == lastIndex()) {

emptyPosition = i;

break;

}}

background.emptyPosition = emptyPosition;

// 随机移动次数

var times = 10;

while (times--) {

// 获取随机数,决定空位哪个位置进行移动

var direction = parseInt(Math.random() 4);

var target = -1;

if (direction == 0) {

target = topOfPosition(emptyPosition); // 上

} else if (direction == 1) {

target = leftOfPosition(emptyPosition); // 左

} else if (direction == 2) {

target = rightOfPosition(emptyPosition); // 右

} else if (direction == 3) {

target = bottomOfPosition(emptyPosition); // 下

}if (target < 0 || target > lastIndex()) { // 位置不合法,继续下一次循环

continue;

}var result = moveImageIfCanAtPosition(target);

if (result >= 0) { // 如果移动成功,更新空位的位置

emptyPosition = target;

}}

}2、判断是否可以移动方块在保存顺序的时候,是用 0~8 这 9 个数字来保存,而空白的方块是数字 8 的位置。所以判断可以移动的条件是,目标位置的值是否为 8。代码如下:

var isPositionEmpty = function(ition) {

if (ition < 0 || ition > lastIndex()) {

return false;

}if (imageIndexForPosition[ition] == lastIndex()) {

return true;

} else {

return false;

}}上面 lastIndex() 的值为 8。

3、实现方块移动方块移动的实现很简单,先将旧位置的图形清除,然后在新的位置绘制。

var refreshImagePositions = function(origin, target) {

var originRect = rectForPosition(origin);

context.clearRect(originRect[0], originRect[1], originRect[2], originRect[3]);

drawImageItem(imageIndexForPosition[target], target);

}4、检查是否完成检查图案是否已经还原,只需要对数组进行一次遍历,看是否有序即可。

var checkIfFinish = function() {

for (var index = 0; index < imageIndexForPosition.length; index++) {

if (index != imageIndexForPosition[index]) {

return false;

}}

return true;

}5、交互屏蔽当图案还原之后,我们不希望玩家还能通过键盘或鼠标来移动方块,这个时候就需要对交互进行屏蔽。

只需要一个标志位就可以达到这个目的:

// 屏幕点击

background.onclick = function(e) {

if (isFinish) {

return;

}// do soming

};

// 键盘按钮

document.onkeyup = function(nt) {

if (isFinish) {

return;

}// do soming

}当图案还原之后,标志位 isFinish 会被置为 true ,然后在屏幕点击和键盘按钮响应的开始处添加判断,如果已经结束,则不继续走方块移动的逻辑。

33拼图游戏算法实现(C++的代码)

{scanf("%d", &dest.[m][k]);

我这个程序是求还原矩阵所需的最少步数,你只要稍作修改就可以了。把路径记录下来输出。

#include

#include

#include

#include

using namespace std;

struct Board

{int [5][5];

string step;

};

Board origin;

bool st[362880];

int direction[4][2] = {-1, 0, 1, 0, 0, 1, 0, -1};//swap 0 with dowm, up, right, left

void Reset()

{int i, j;

memset(origin., 255, sizeof(origin.));

for (i=1; i<4; i++)

{for (j=1; j<4; j++)

{origin.po{queue< Board > que;s[i][j] = (i-1)3 + j;

}}

}bool Equal(Board b1, Board b2)

{int i, k;

for (i=1; i<4; i++)

{for (k=1; k<4; k++)

{if (b1.[i][k] != b2.[i][k])

{return false;

}}

}int main()

{int cases;

Board current, dest;

Reset();

scanf("%d", &cases);

for (i=0; i

for (m=1; m<4; m++)

{for (k=1; k<4; k++)

}}

if(Equal(origin, dest))

{printf("0n");

continue;

}que.push(origin);

while (false == que.empty())

{current = que.front();

que.pop();

int len = current.step.length();

if (len == 5)

{break;

}for (m=1; m<4; m++)

{for (k=1; k<4; k++)

{if (0 == current.[m][k])

{goto out;

}}

}out:

for (l=0; l<4; l++)

{if (0==l && current.step[len-1] == '1')

{continue;

}if (1==l && current.step[len-1] == '0')

{continue;

}if (2==l && current.step[len-1] == '3')

{continue;

}if (3==l && current.step[len-1] == '2')

{continue;

}if (current.[m+direction[l][0]][k+direction[l][1]]>0)

{swap(current.[m][k], current.[m+direction[l][0]][k+direction[l][1]]);

current.step += l + '0';

if (Equal(current, dest))

{goto print;

}else

{que.push(current);

current.step.resize(current.step.length()-1);

swap(current.[m][k], current.[m+direction[l][0]][k+direction[l][1]]);

}}

}}

print:

}return 0;

}

如何利用原生的JaScript来实现一个简单的拼图小游戏

本篇文章的内容是关于如何利用原生的 JaScript来实现一个简单的拼图小游戏,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

一、游戏的基础逻辑

想用一门语言来开发游戏,必须先了解如何使用这门语言来实现一些基础逻辑,比如图像的绘制、交互的处理、定时器等。

1、图形绘制图形绘制是一切的基础,这里使用 JaScript 在 canvas 上进行绘制。即先在 html 中创建 canvas 元素,然后在 JaScript 中,通过 id 拿到这个元素,并且通过 canvas 拿到对应的上下文环境 context ,为后续的绘图做好准备。

var background = document.getElementById("background");

var context = background.getContext('2d');通过 context 的 drawImage 方法可以绘制,这里进行了相应的封装:

注:这里要等加载完毕后再进行绘制,即在 onload 中去调用 drawImage 方法,否则会绘制失败。

var drawImageItem = function(index, ition) {

var img = new Image();

img.onload = () => {

context.drawImage(img, rect[0], rect[1], rect[2], rect[3]);

}}在绘制之后,我们还需要去动态刷新视图,否则 canvas 就只是一张静态的。如果是简单的图形刷新,只需在原来的位置重新绘制,进行覆盖即可。但有时候我们只需要将原来已存在的图形清除掉,而不需要绘制新图案。比如在拼图游戏中,将一个方块移动到另一个位置后,需要清空原来的位置。

通过 context 的 clearRect 方法可以达到清除的目的。以下是清除 canvas 的某个区域的代码:

var originRect = rectForPosition(origin);

context.clearRect(originRect[0], originRect[1], originRect[2], originRect[3]);2、处理有了图形的绘制后,我们还需要处理玩家的输入,然后根据输入,来决定什么时候刷新视图。输入可以分为 3 种:在手机上有触屏;在 PC 上,有鼠标和键盘。

JaScript 中对触屏和鼠标点击的是一样的,都是通过 canvas 的 onclick 进行回调,具体如下:

// 屏幕点击

background.onclick = function(e) {

注: canvas 的坐标原点在左上角,即左上角的坐标是 (0, 0) 。

键盘的按键点击则是通过 document 的 onkeyup 、 onkeydown 等进行回调。 onkeyup 是指按键的抬起, onkeydown 是指按键的按下。我们可以通过 keyCode 知道当前具体是哪一个按键,然后根据不同的按键去处理不同的逻辑,如下:

if (nt.keyCode == '37') { // 左

// do soming

// do soming

} else if (nt.keyCode == '39') { // 右

// do soming

} else if (nt.keyCode == '40') { // 下

// do soming

}3、定时器有时候,除了在玩家输入的时候需要去刷新视图,还需要每隔一段时间定时去刷新视图。比如在一个贪吃蛇游戏中,就需要每隔一段时间就去刷新蛇的位置。

这个时候我们就需要一个定时器,让它每隔一段时间去执行一段刷新视图的代码。我们通过 setInterval 方法来实现定时器功能:

setInterval("run()", 100);上面这段代码表示每隔 100 毫秒,去执行一次 run 方法。

二、拼图的基础逻辑有了游戏的基础逻辑,下面来看一下如何实现拼图的逻辑。

1、生成随机序列因为不是任意序列都可以通过平移的方式来还原,所以我们不能简单地生成一个随机序列。比如 1、0、2、3、4、5、6、7、8 这个序列,无论怎么平移,都不可能还原。

这里采取的做法是:预先设置了 4 个可还原的序列,先从这 4 个序列中随机选取一个,然后再对序列进行模拟平移若干步骤。以此来尽可能地保证初始序列的多样性,也保证了序列的可还原性。具体代码如下:

var setupRandomPosition = function() {

var list1 = [4, 3, 2, 8, 0, 7, 5, 6, 1];

var list3 = [3, 7, 2, 4, 1, 6, 8, 0, 5];

var list4 = [3, 2, 4, 1, 7, 6, 5, 0, 8];

var lists = [list1, list2, list3, list4];

imageIndexForPosition = lists[parseInt(Math.random() 4)];

var emptyPosition = 0;

for (var i = imageIndexForPosition.length - 1; i >= 0; i--) {

if (imageIndexForPosition[i] == lastIndex()) {

emptyPosition = i;

break;

}}

background.emptyPosition = emptyPosition;

// 随机移动次数

var times = 10;

while } else if (nt.keyCode == '38') { // 上(times--) {

// 获取随机数,决定空位哪个位置进行移动

var direction = parseInt(Math.random() 4);

var target = -1;

if (direction == 0) {

target = topOfPosition(emptyPosition); // 上

} else if (direction == 1) {

target = leftOfPosition(emptyPosition); // 左

} else if (direction == 2) {

target = rightOfPosition(emptyPosition); // 右

} else if (direction == 3) {

target = bottomOfPosition(emptyPosition); // 下

}if (target < 0 || target > lastIndex()) { // 位置不合法,继续下一次循环

continue;

}var result = moveImageIfCanAtPosition(target);

if (result >= 0) { // 如果移动成功,更新空位的位置

emptyPosition = target;

}}

}2、判断是否可以移动方块在保存顺序的时候,是用 0~8 这 9 个数字来保存,而空白的方块是数字 8 的位置。所以判断可以移动的条件是,目标位置的值是否为 8。代码如下:

var isPositionEmpty = function(ition) {

if (ition < 0 || ition > lastIndex()) {

return false;

}if (imageIndexForPosition[ition] == lastIndex()) {

retuimg.src = './image/dog_0' + String(index+1) + '.jpg';rn true;

} else {

return false;

}}上面 lastIndex() 的值为 8。

3、实现方块移动方块移动的实现很简单,先将旧位置的图形清除,然后在新的位置绘制。

var refreshImagePositions = function(origin, target) {

var originRect = rectForPosition(origin);

context.clearRect(originRect[0], originRect[1], originRect[2], originRect[3]);

drawImageItem(imageIndexForPosition[target], target);

}4、检查是否完成检查图案是否已经还原,只需要对数组进行一次遍历,看是否有序即可。

var checkIfFinish = function() {

for (var index = 0; index < imageIndexForPosition.length; index++) {

if (index != imageIndexForPosition[index]) {

return false;

}}

return true;

}5、交互屏蔽当图案还原之后,我们不希望玩家还能通过键盘或鼠标来移动方块,这个时候就需要对交互进行屏蔽。

只需要一个标志位就可以达到这个目的:

// 屏幕点击

background.onclick = function(e) {

if (isFinish) {

return;

}// do soming

};

// 键盘按钮

document.onkeyup = function(nt) {

if (isFinish) {

return;

}// do soming

}当图案还原之后,标志位 isFinish 会被置为 true ,然后在屏幕点击和键盘按钮响应的开始处添加判断,如果已经结束,则不继续走方块移动的逻辑。