import React, { Component } from 'react'
import {
StyleSheet,
View,
Text,
ActivityIndicator,
TextInput,
TouchableOpacity,
ImageBackground,
Dimensions,
Image,
PixelRatio,
PanResponder,
} from 'react-native'
import SplashScreen from 'react-native-splash-screen'
const { height, width } = Dimensions.get('window')
class testaaa extends Component {
constructor(props) {
super(props)
this.state = {
gameDivs: [],
nextDivs: [],
}
this.TouchX = 0
this.TouchY = 0
this.downI = 0
this.flag = true
// 手势---------------------------------------
this._panResponder = PanResponder.create({
// 要求成为响应者:
onStartShouldSetPanResponder: (evt: Object, gestureState: Object) => true,
onStartShouldSetPanResponderCapture: (
evt: Object,
gestureState: Object
) => true,
onMoveShouldSetPanResponder: (evt: Object, gestureState: Object) => true,
onMoveShouldSetPanResponderCapture: (evt: Object, gestureState: Object) =>
true,
onPanResponderGrant: (evt: Object, gestureState: Object) => {
// let moveY = Math.floor((evt.nativeEvent.pageX - 60) / 20);
// if (moveY >= 7) {
// moveY = 7;
// } else if (moveY <= 0) {
// moveY = -1;
// }
// this.TouchY = moveY;
// this.init();
// console.log(evt, "onPanResponderGrant ---11111111111111");
// console.log(gestureState, "onPanResponderGrant ---2222222222");
// 开始手势操作。给用户一些视觉反馈,让他们知道发生了什么事情!
// gestureState.{x,y} 现在会被设置为0
},
onPanResponderMove: (evt: Object, gestureState: Object) => {
let moveY = Math.floor((gestureState.moveX - 50) / 20)
if (moveY >= 6) {
moveY = 6
} else if (moveY <= 0) {
moveY = 0
}
this.TouchX = moveY
this.init()
// 最近一次的移动距离为gestureState.move{X,Y}
// 从成为响应者开始时的累计手势移动距离为gestureState.d{x,y}
},
onPanResponderTerminationRequest: (evt: Object, gestureState: Object) =>
true,
onPanResponderRelease: (evt: Object, gestureState: Object) => {
// 用户放开了所有的触摸点,且此时视图已经成为了响应者。
// 一般来说这意味着一个手势操作已经成功完成。
},
onPanResponderTerminate: (evt: Object, gestureState: Object) => {
// 另一个组件已经成为了新的响应者,所以当前手势将被取消。
},
onShouldBlockNativeResponder: (evt: Object, gestureState: Object) => {
// 返回一个布尔值,决定当前组件是否应该阻止原生组件成为JS响应者
// 默认返回true。目前暂时只支持android。
return true
},
})
// 手势---------------------------------------
}
componentDidMount() {
SplashScreen.hide()
this.setIntervalFn(true)
this.init()
}
// 定时器
setIntervalFn(isOpen) {
if (isOpen) {
// flag 避免重复点击
if (this.flag) {
this.flag = false
this.settime = setInterval(() => {
this.downOpera()
}, 100)
}
} else {
this.flag = true
clearInterval(this.settime)
}
}
init() {
const nextDatas = [[0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 0], [0, 0, 0, 0]],
gameDatas = [
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[2, 0, 0, 2, 2, 2, 2, 2, 2, 2],
[2, 2, 0, 2, 2, 2, 2, 2, 2, 2],
[2, 2, 2, 2, 2, 2, 2, 0, 2, 2],
[2, 2, 2, 0, 2, 2, 2, 2, 2, 2],
[2, 2, 2, 2, 0, 2, 2, 2, 2, 2],
[0, 2, 2, 2, 2, 2, 2, 2, 2, 2],
]
for (let i = 0; i < nextDatas.length; i++) {
for (let j = 0; j < nextDatas[0].length; j++) {
if (nextDatas[i][j] != 0) {
gameDatas[this.TouchY + i][this.TouchX + j] = nextDatas[i][j]
}
}
}
this.setGame(gameDatas, nextDatas)
}
downOpera() {
this.TouchY = this.downI++
if (this.TouchY >= 16) {
this.TouchY = 16
this.downI = 0
this.setIntervalFn()
}
this.init()
}
setGame(gameDatas, nextDatas) {
if (
gameDatas &&
gameDatas.length > 0 &&
nextDatas &&
nextDatas.length > 0
) {
this.setState({
gameDivs: this.squareFn(gameDatas, true),
nextDivs: this.squareFn(nextDatas),
})
} else if (gameDatas && gameDatas.length > 0) {
this.setState({
gameDivs: this.squareFn(gameDatas, true),
})
} else if (nextDatas && nextDatas.length > 0) {
this.setState({
nextDivs: this.squareFn(nextDatas),
})
}
}
squareFn(value: Array) {
if (!value) return
const gameDivs = []
for (let i = 0; i < value.length; i++) {
let gameDiv = []
for (let j = 0; j < value[0].length; j++) {
let smallClass = ''
if (value[i][j] == 1) {
smallClass = 'current'
} else if (value[i][j] == 2) {
smallClass = 'done'
}
const newNode = (
)
if (value[i][j] != 0) {
gameDiv.push(newNode)
}
}
gameDivs.push(gameDiv)
}
return gameDivs
}
render() {
return (
{this.state.gameDivs}
{this.state.nextDivs}
已用时:0s
已得分:0分
{
this.setIntervalFn()
}}
>
停止
{
this.setIntervalFn(true)
}}
>
开始
)
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
position: 'absolute',
flexDirection: 'row',
paddingTop: 20,
paddingLeft: 20,
top: 150,
left: 20,
},
small: {
width: 20,
height: 20,
position: 'absolute',
},
current: {
backgroundColor: 'pink',
borderColor: 'red',
borderWidth: 1,
},
done: {
backgroundColor: 'gray',
borderColor: 'black',
borderWidth: 1,
},
})
export default testaaa