Add files via upload
This commit is contained in:
parent
d640b62eef
commit
70b5475d83
42
src/main/config.json
Normal file
42
src/main/config.json
Normal file
@ -0,0 +1,42 @@
|
||||
{
|
||||
"app": {
|
||||
"apiVersion": {
|
||||
"compatible": 3,
|
||||
"target": 4,
|
||||
"releaseType": "Release"
|
||||
},
|
||||
"bundleName": "my.game20481.myapplication",
|
||||
"vendor": "game20481",
|
||||
"version": {
|
||||
"code": 1000000,
|
||||
"name": "1.0.0"
|
||||
}
|
||||
},
|
||||
"deviceConfig": {},
|
||||
"module": {
|
||||
"deviceType": [
|
||||
"liteWearable"
|
||||
],
|
||||
"distro": {
|
||||
"deliveryWithInstall": true,
|
||||
"moduleName": "entry",
|
||||
"moduleType": "entry"
|
||||
},
|
||||
"abilities": [
|
||||
{
|
||||
"name": "default",
|
||||
"icon": "$media:icon",
|
||||
"label": "$string:entry_MainAbility",
|
||||
"type": "page"
|
||||
}
|
||||
],
|
||||
"js": [
|
||||
{
|
||||
"pages": [
|
||||
"pages/index/index"
|
||||
],
|
||||
"name": "default"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
8
src/main/js/default/app.js
Normal file
8
src/main/js/default/app.js
Normal file
@ -0,0 +1,8 @@
|
||||
export default {
|
||||
onCreate() {
|
||||
console.info("Application onCreate");
|
||||
},
|
||||
onDestroy() {
|
||||
console.info("Application onDestroy");
|
||||
}
|
||||
};
|
62
src/main/js/default/pages/index/index.css
Normal file
62
src/main/js/default/pages/index/index.css
Normal file
@ -0,0 +1,62 @@
|
||||
.container{
|
||||
width: 454px;
|
||||
height: 454px;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.score{
|
||||
text-align: center;
|
||||
width: 234px;
|
||||
height: 30px;
|
||||
letter-spacing: 0px;
|
||||
margin-top: 4px;
|
||||
margin-bottom:6px;
|
||||
}
|
||||
.best{
|
||||
text-align: center;
|
||||
width: 234px;
|
||||
height: 30px;
|
||||
letter-spacing: 0px;
|
||||
margin-top: 19px;
|
||||
}
|
||||
.tile-wrap{
|
||||
width: 300px;
|
||||
height: 300px;
|
||||
flex-wrap: wrap;
|
||||
background-color: #FFFFFF;
|
||||
}
|
||||
.tile{
|
||||
width: 70px;
|
||||
height: 70px;
|
||||
margin-top: 4px;
|
||||
margin-left: 4px;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.btn{
|
||||
width: 135px;
|
||||
height: 45px;
|
||||
background-color: #1F71FF;
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.text{
|
||||
font-size: 30px;
|
||||
color: #000000;
|
||||
}
|
||||
.stack{
|
||||
width: 300px;
|
||||
height: 300px;
|
||||
}
|
||||
.subcontainer{
|
||||
width: 300px;
|
||||
height: 300px;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
background-color: transparent;
|
||||
}
|
||||
.gameover{
|
||||
font-size: 40px;
|
||||
color: #FF7500;
|
||||
}
|
23
src/main/js/default/pages/index/index.hml
Normal file
23
src/main/js/default/pages/index/index.hml
Normal file
@ -0,0 +1,23 @@
|
||||
<div class="container">
|
||||
<text class="best">
|
||||
Best:{{best}}
|
||||
</text>
|
||||
<text class="score">
|
||||
Score:{{score}}
|
||||
</text>
|
||||
<stack class="stack">
|
||||
<div class="tile-wrap" onswipe="onSwipe">
|
||||
<div class="tile" for="{{tiles}}" style="background-color:#000000">
|
||||
<text class="text" style="color:#FFFFFF">
|
||||
{{$item.text}}
|
||||
</text>
|
||||
</div>
|
||||
</div>
|
||||
<div class="subcontainer" show="{{isShow}}">
|
||||
<text class="gameover">
|
||||
Gameover!
|
||||
</text>
|
||||
</div>
|
||||
</stack>
|
||||
<input class="btn" type="button" value="Restart!" onclick="onInit" ></input>
|
||||
</div>
|
127
src/main/js/default/pages/index/index.js
Normal file
127
src/main/js/default/pages/index/index.js
Normal file
@ -0,0 +1,127 @@
|
||||
import brightness from '@system.brightness';
|
||||
let numbers,newNumbers;
|
||||
export default{
|
||||
data:{
|
||||
score:0,
|
||||
best:0,
|
||||
tiles:[],
|
||||
isShow:false,
|
||||
},
|
||||
onInit() {
|
||||
this.isShow=false;
|
||||
this.score=0;
|
||||
this.tiles=[{text:""},{text:""},{text:""},{text:""},{text:""},{text:""},{text:""},{text:""},{text:""},{text:""},{text:""},{text:""},{text:""},{text:""},{text:""},{text:""}];
|
||||
numbers=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
|
||||
newNumbers=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
|
||||
this.supplyNumber();
|
||||
this.supplyNumber();
|
||||
this.updateView();
|
||||
brightness.setKeepScreenOn({keepScreenOn: true,});
|
||||
brightness.setMode({mode: 1,});
|
||||
},
|
||||
supplyNumber(){
|
||||
let positions=[];
|
||||
for(let i=0;i<=15;i++){
|
||||
if(!newNumbers[i]) positions.push(i);
|
||||
}
|
||||
let h=Math.floor(Math.random()*positions.length);
|
||||
if (Math.random()<=0.8){
|
||||
newNumbers[positions[h]]=2;
|
||||
}else{
|
||||
newNumbers[positions[h]]=4;
|
||||
}
|
||||
},
|
||||
onSwipe(e) {
|
||||
newNumbers=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
|
||||
let start=0,differ=0,step=0;
|
||||
switch(e.direction){
|
||||
case 'left':
|
||||
start=0;
|
||||
differ=1;
|
||||
step=4;
|
||||
break;
|
||||
case 'right':
|
||||
start=3;
|
||||
differ=-1;
|
||||
step=4;
|
||||
break;
|
||||
case 'up':
|
||||
start=0;
|
||||
differ=4;
|
||||
step=1;
|
||||
break;
|
||||
case 'down':
|
||||
start=12;
|
||||
differ=-4;
|
||||
step=1;
|
||||
break;
|
||||
}
|
||||
let ids;
|
||||
for (let j=0;j<=3;j++){
|
||||
ids=this.getIds(start, differ);
|
||||
let before=null;
|
||||
let noZeros=0;
|
||||
for(let k=0;k<=3;k++){
|
||||
let id=ids[k];
|
||||
let number=numbers[id];
|
||||
if (number!=0){
|
||||
if(number==before){
|
||||
this.score+=number*2;
|
||||
newNumbers[ids[noZeros-1]]*=2;
|
||||
before=null;
|
||||
}else{
|
||||
newNumbers[ids[noZeros]]=number;
|
||||
before=number;
|
||||
noZeros+=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
start+=step;
|
||||
}
|
||||
if(this.best>=this.score){
|
||||
this.best=this.best;
|
||||
}else{
|
||||
this.best=this.score;}
|
||||
if(numbers.toString()!=newNumbers.toString()){
|
||||
this.supplyNumber();
|
||||
this.updateView();
|
||||
newNumbers=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
|
||||
if(this.isGameOver()==true){this.isShow=true;}
|
||||
}
|
||||
},
|
||||
getIds(start, differ){
|
||||
let ids=[];
|
||||
for (let z=4;z>=1;z--){
|
||||
ids.push(start);
|
||||
start+=differ;
|
||||
}
|
||||
return ids;
|
||||
},
|
||||
updateView() {
|
||||
for (let x=0;x<=15;x++) {
|
||||
if (newNumbers[x]!=0){
|
||||
this.tiles[x].text=newNumbers[x].toString();
|
||||
}else{
|
||||
this.tiles[x].text="";
|
||||
}
|
||||
}
|
||||
numbers=newNumbers;
|
||||
},
|
||||
isGameOver(){
|
||||
if(this.isGridsFull()==true && this.isGridsNotMergeable()==true) return true;
|
||||
},
|
||||
isGridsFull(){
|
||||
if(numbers.indexOf(0)==-1){return true;}
|
||||
},
|
||||
isGridsNotMergeable(){
|
||||
for(let l=0;l<=15;l++){
|
||||
if(l<=14){
|
||||
if(numbers[l]==numbers[l+1]&&(l+1)%4!=0) return false;
|
||||
}
|
||||
if(l<=11){
|
||||
if(numbers[l]==numbers[l+4]) return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
},
|
||||
}
|
8
src/main/resources/base/element/string.json
Normal file
8
src/main/resources/base/element/string.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"string": [
|
||||
{
|
||||
"name": "entry_MainAbility",
|
||||
"value": "entry_MainAbility"
|
||||
}
|
||||
]
|
||||
}
|
BIN
src/main/resources/base/media/icon.png
Normal file
BIN
src/main/resources/base/media/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.9 KiB |
BIN
src/main/resources/base/media/icon_small.png
Normal file
BIN
src/main/resources/base/media/icon_small.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.3 KiB |
Reference in New Issue
Block a user