Update

Wow, did not know there is actually a thing called DinoCoin. If you came here because of that then you will be disappointed. This project is not related to that.

------------------------------------------------------------------------

Batch file:

:start
rem set java_exe="c:\Program Files\Java\jdk1.7.0\bin\java.exe"
rem set javaw_exe="c:\Program Files\Java\jdk1.7.0\bin\javaw.exe"
rem set ANDROID_SWT=c:\work\android-sdk-windows\tools\lib\x86_64\
@echo "Start"
@time /t
call c:\work\android-sdk-windows\tools\monkeyrunner.bat %CD%\mr_touchpad.py
@time /t
timeout /t 150
goto start
pause
As you can see it wakes up every 150s and starts the script attached below.

There is a main pattern for changing the game area:

So it starts in the bottom right position - by game design - and moves one screen up until it reaches the top. Then it goes one screen to the right at starts swiping down, again, one screen at a time.

At the bottom, it starts the same pattern again.

The area (largeXIterations x largeYIterations) and swiping size (largeXStep and largeYStep) are hardcoded in the Python script. Currently this is a 5 x 3 grid.

On each screen, the automator clicks on all the points from a grid-like pattern, pictured below:

So each screen (~850x450px) gets ~100 clicks yielded by the formula: (maxX-minX)/smallXStep)*(maxY-minY)/smallYStep).

The click (tap) horizontal positions are slightly randomized, by ~4 pixels. Also, each click has a random chance of 33% of being performed.

This is done for multiple reasons:

- the ADB automation is slow to respond and doing the complete pattern wastes a lot of time

- the coins are not regenerated so often, it's ok if some are missed

- empirically, there's a higher chance for a higher return (yield) using a fast sparse game swipe than a slow complete swipe

mr_touchpad.py:

# Imports the monkeyrunner modules used by this program
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
import time, math
import java.util.Random; random=java.util.Random()

# Constants
duration = 1
steps    = 30

print("Connecting...")
# Connects to the current device, returning a MonkeyDevice object
device = MonkeyRunner.waitForConnection()
print("...done")

# Installs the Android package. Notice that this method returns a boolean, so you can test
# to see if the installation worked.

# sets a variable with the package's internal name
package = 'com.ludia.jurassicpark'

# sets a variable with the name of an Activity in the package
activity = 'com.ludia.gameengine.GameActivity'

# sets the name of the component to start
runComponent = package + '/' + activity

# Kill Application
device.shell("am force-stop " + package)
time.sleep(1)

# wake device
device.wake()
time.sleep(1)

# Runs the activity
device.startActivity(component=runComponent)

# unlock
device.drag((741, 374), (948, 374), duration, steps)

# wait for start
time.sleep(38)

'''
# Close Ad
time.sleep(10)
device.touch(1165, 40, MonkeyDevice.DOWN_AND_UP)

# Press Start
time.sleep(10)
device.touch(600, 400, MonkeyDevice.DOWN_AND_UP)

# Select Chapter 1
time.sleep(2)
device.touch(150, 280, MonkeyDevice.DOWN_AND_UP)

# Select Puzzle 1
time.sleep(2)
device.touch(110, 110, MonkeyDevice.DOWN_AND_UP)

# Skip intro
time.sleep(2)
device.touch(1165, 680, MonkeyDevice.DOWN_AND_UP)

time.sleep(2)
device.touch(600, 400, MonkeyDevice.DOWN_AND_UP)

# Drag
time.sleep(6)
device.drag((396,398), (170,484), 1.0, 10)


# Takes a screenshot
time.sleep(15)
result = device.takeSnapshot()

# Writes the screenshot to a file
result.writeToFile('./testimage.png','png')
'''

def devicetouch(x,y,s):
	device.touch(x, y, MonkeyDevice.DOWN)
	time.sleep(0.1)
	device.touch(x, y, MonkeyDevice.UP)
	time.sleep(0.1)

def moveHorizontal(offset):
	device.drag((500, 380), (500-offset, 380), duration/1.5, steps)
	time.sleep(0.7)

def moveVertical(offset2):
	device.drag((500, 155), (500, 155+offset2), duration/1.5, steps)
	time.sleep(0.7)

def harvest():
        for x in range(0, math.floor((maxX-minX)/smallXStep)):
                for y in range(0...
Read more »