first commit
8
Dockerfile
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
FROM nginx:alpine
|
||||||
|
|
||||||
|
# Bring in Pacman
|
||||||
|
COPY html /usr/share/nginx/html
|
||||||
|
COPY start_nginx.sh /
|
||||||
|
|
||||||
|
# Run nginx
|
||||||
|
CMD /start_nginx.sh
|
3
html/.htaccess
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
AddType application/x-web-app-manifest+json .webapp
|
||||||
|
AddType application/json .json
|
||||||
|
AddCharset ISO-8859-1 .json
|
121
html/LICENSE
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
Creative Commons Legal Code
|
||||||
|
|
||||||
|
CC0 1.0 Universal
|
||||||
|
|
||||||
|
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
|
||||||
|
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
|
||||||
|
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
|
||||||
|
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
|
||||||
|
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
|
||||||
|
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
|
||||||
|
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
|
||||||
|
HEREUNDER.
|
||||||
|
|
||||||
|
Statement of Purpose
|
||||||
|
|
||||||
|
The laws of most jurisdictions throughout the world automatically confer
|
||||||
|
exclusive Copyright and Related Rights (defined below) upon the creator
|
||||||
|
and subsequent owner(s) (each and all, an "owner") of an original work of
|
||||||
|
authorship and/or a database (each, a "Work").
|
||||||
|
|
||||||
|
Certain owners wish to permanently relinquish those rights to a Work for
|
||||||
|
the purpose of contributing to a commons of creative, cultural and
|
||||||
|
scientific works ("Commons") that the public can reliably and without fear
|
||||||
|
of later claims of infringement build upon, modify, incorporate in other
|
||||||
|
works, reuse and redistribute as freely as possible in any form whatsoever
|
||||||
|
and for any purposes, including without limitation commercial purposes.
|
||||||
|
These owners may contribute to the Commons to promote the ideal of a free
|
||||||
|
culture and the further production of creative, cultural and scientific
|
||||||
|
works, or to gain reputation or greater distribution for their Work in
|
||||||
|
part through the use and efforts of others.
|
||||||
|
|
||||||
|
For these and/or other purposes and motivations, and without any
|
||||||
|
expectation of additional consideration or compensation, the person
|
||||||
|
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
|
||||||
|
is an owner of Copyright and Related Rights in the Work, voluntarily
|
||||||
|
elects to apply CC0 to the Work and publicly distribute the Work under its
|
||||||
|
terms, with knowledge of his or her Copyright and Related Rights in the
|
||||||
|
Work and the meaning and intended legal effect of CC0 on those rights.
|
||||||
|
|
||||||
|
1. Copyright and Related Rights. A Work made available under CC0 may be
|
||||||
|
protected by copyright and related or neighboring rights ("Copyright and
|
||||||
|
Related Rights"). Copyright and Related Rights include, but are not
|
||||||
|
limited to, the following:
|
||||||
|
|
||||||
|
i. the right to reproduce, adapt, distribute, perform, display,
|
||||||
|
communicate, and translate a Work;
|
||||||
|
ii. moral rights retained by the original author(s) and/or performer(s);
|
||||||
|
iii. publicity and privacy rights pertaining to a person's image or
|
||||||
|
likeness depicted in a Work;
|
||||||
|
iv. rights protecting against unfair competition in regards to a Work,
|
||||||
|
subject to the limitations in paragraph 4(a), below;
|
||||||
|
v. rights protecting the extraction, dissemination, use and reuse of data
|
||||||
|
in a Work;
|
||||||
|
vi. database rights (such as those arising under Directive 96/9/EC of the
|
||||||
|
European Parliament and of the Council of 11 March 1996 on the legal
|
||||||
|
protection of databases, and under any national implementation
|
||||||
|
thereof, including any amended or successor version of such
|
||||||
|
directive); and
|
||||||
|
vii. other similar, equivalent or corresponding rights throughout the
|
||||||
|
world based on applicable law or treaty, and any national
|
||||||
|
implementations thereof.
|
||||||
|
|
||||||
|
2. Waiver. To the greatest extent permitted by, but not in contravention
|
||||||
|
of, applicable law, Affirmer hereby overtly, fully, permanently,
|
||||||
|
irrevocably and unconditionally waives, abandons, and surrenders all of
|
||||||
|
Affirmer's Copyright and Related Rights and associated claims and causes
|
||||||
|
of action, whether now known or unknown (including existing as well as
|
||||||
|
future claims and causes of action), in the Work (i) in all territories
|
||||||
|
worldwide, (ii) for the maximum duration provided by applicable law or
|
||||||
|
treaty (including future time extensions), (iii) in any current or future
|
||||||
|
medium and for any number of copies, and (iv) for any purpose whatsoever,
|
||||||
|
including without limitation commercial, advertising or promotional
|
||||||
|
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
|
||||||
|
member of the public at large and to the detriment of Affirmer's heirs and
|
||||||
|
successors, fully intending that such Waiver shall not be subject to
|
||||||
|
revocation, rescission, cancellation, termination, or any other legal or
|
||||||
|
equitable action to disrupt the quiet enjoyment of the Work by the public
|
||||||
|
as contemplated by Affirmer's express Statement of Purpose.
|
||||||
|
|
||||||
|
3. Public License Fallback. Should any part of the Waiver for any reason
|
||||||
|
be judged legally invalid or ineffective under applicable law, then the
|
||||||
|
Waiver shall be preserved to the maximum extent permitted taking into
|
||||||
|
account Affirmer's express Statement of Purpose. In addition, to the
|
||||||
|
extent the Waiver is so judged Affirmer hereby grants to each affected
|
||||||
|
person a royalty-free, non transferable, non sublicensable, non exclusive,
|
||||||
|
irrevocable and unconditional license to exercise Affirmer's Copyright and
|
||||||
|
Related Rights in the Work (i) in all territories worldwide, (ii) for the
|
||||||
|
maximum duration provided by applicable law or treaty (including future
|
||||||
|
time extensions), (iii) in any current or future medium and for any number
|
||||||
|
of copies, and (iv) for any purpose whatsoever, including without
|
||||||
|
limitation commercial, advertising or promotional purposes (the
|
||||||
|
"License"). The License shall be deemed effective as of the date CC0 was
|
||||||
|
applied by Affirmer to the Work. Should any part of the License for any
|
||||||
|
reason be judged legally invalid or ineffective under applicable law, such
|
||||||
|
partial invalidity or ineffectiveness shall not invalidate the remainder
|
||||||
|
of the License, and in such case Affirmer hereby affirms that he or she
|
||||||
|
will not (i) exercise any of his or her remaining Copyright and Related
|
||||||
|
Rights in the Work or (ii) assert any associated claims and causes of
|
||||||
|
action with respect to the Work, in either case contrary to Affirmer's
|
||||||
|
express Statement of Purpose.
|
||||||
|
|
||||||
|
4. Limitations and Disclaimers.
|
||||||
|
|
||||||
|
a. No trademark or patent rights held by Affirmer are waived, abandoned,
|
||||||
|
surrendered, licensed or otherwise affected by this document.
|
||||||
|
b. Affirmer offers the Work as-is and makes no representations or
|
||||||
|
warranties of any kind concerning the Work, express, implied,
|
||||||
|
statutory or otherwise, including without limitation warranties of
|
||||||
|
title, merchantability, fitness for a particular purpose, non
|
||||||
|
infringement, or the absence of latent or other defects, accuracy, or
|
||||||
|
the present or absence of errors, whether or not discoverable, all to
|
||||||
|
the greatest extent permissible under applicable law.
|
||||||
|
c. Affirmer disclaims responsibility for clearing rights of other persons
|
||||||
|
that may apply to the Work or any use thereof, including without
|
||||||
|
limitation any person's Copyright and Related Rights in the Work.
|
||||||
|
Further, Affirmer disclaims responsibility for obtaining any necessary
|
||||||
|
consents, permissions or other rights required for any use of the
|
||||||
|
Work.
|
||||||
|
d. Affirmer understands and acknowledges that Creative Commons is not a
|
||||||
|
party to this document and has no duty or obligation with respect to
|
||||||
|
this CC0 or use of the Work.
|
203
html/README.md
Normal file
@ -0,0 +1,203 @@
|
|||||||
|
pacman-canvas
|
||||||
|
=============
|
||||||
|
|
||||||
|
An old classic, re-written in HTML5.
|
||||||
|
Visit http://pacman.platzh1rsch.ch to see it live.
|
||||||
|
|
||||||
|
Sounds from
|
||||||
|
http://soundfxcenter.com/ and http://soundfxnow.com/
|
||||||
|
|
||||||
|
If you like this project, feel free to buy me a coffee:
|
||||||
|
|
||||||
|
<a href="https://www.buymeacoffee.com/platzh1rsch" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/default-orange.png" alt="Buy Me A Coffee" height="41" width="174"></a>
|
||||||
|
|
||||||
|
|
||||||
|
------
|
||||||
|
|
||||||
|
License
|
||||||
|
=======
|
||||||
|
|
||||||
|
Feel free to use / copy / modify my code, as long as you reshare your version and give some credit to the original author (me).
|
||||||
|
|
||||||
|
<a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a><br /><span xmlns:dct="http://purl.org/dc/terms/" property="dct:title">Pacman Canvas</span> by <a xmlns:cc="http://creativecommons.org/ns#" href="http://platzh1rsch.ch" property="cc:attributionName" rel="cc:attributionURL">Platzh1rsch</a> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International License</a>.<br />Based on a work at <a xmlns:dct="http://purl.org/dc/terms/" href="https://github.com/platzhersh/pacman-canvas" rel="dct:source">https://github.com/platzhersh/pacman-canvas</a>.
|
||||||
|
|
||||||
|
|
||||||
|
Get started
|
||||||
|
===========
|
||||||
|
|
||||||
|
To just run the game locally, run `npm start`.
|
||||||
|
If you want to see the console logs in your browser, use the `npm run start:dev` instead.
|
||||||
|
|
||||||
|
To modify the game for your needs, look at the `pacman-canvas.js` file and make your modifications.
|
||||||
|
To change the look and feel, edit the `pacman-canvas.css` file or also the `index.htm`file, where everything comes together.
|
||||||
|
|
||||||
|
------
|
||||||
|
|
||||||
|
Version history
|
||||||
|
===============
|
||||||
|
|
||||||
|
*Version 1.0.5 - 22.03.2021*
|
||||||
|
* add webpack config
|
||||||
|
* fix finished game state
|
||||||
|
* show console logs when started locally
|
||||||
|
|
||||||
|
*Version 1.0.4 - 26.12.2020*
|
||||||
|
* remove highscore reset endpoint
|
||||||
|
|
||||||
|
*Version 1.0.3 - 26.12.2020*
|
||||||
|
* fix speed issue
|
||||||
|
|
||||||
|
*Version 1.0.2 - 26.12.2020*
|
||||||
|
* add get started section in README
|
||||||
|
* limit to 10 levels for now
|
||||||
|
* small refactorings
|
||||||
|
* add score validation in JS
|
||||||
|
|
||||||
|
*Version 1.0.1 - 6.10.2020*
|
||||||
|
* add `bump-version.sh` to make versioning easier
|
||||||
|
|
||||||
|
*Version 1.0.0 - 5.9.2020*
|
||||||
|
* use "default" version number format, go up to 1.0.0
|
||||||
|
* add `package.json`
|
||||||
|
* add `server.js`
|
||||||
|
* you can now run pacman running an express JS server, using `npm start`
|
||||||
|
* don't use ajax `async: false` anymore to load map config, since it has been marked as deprecated
|
||||||
|
|
||||||
|
*Version 0.93 - 8.1.2020*
|
||||||
|
* add `ads.txt`
|
||||||
|
|
||||||
|
*Version 0.92 - 6.3.2018*
|
||||||
|
* remove navigator.vibrate() calls
|
||||||
|
|
||||||
|
*Version 0.91 - 15.01.2016*
|
||||||
|
* more tests to avoid cheaters
|
||||||
|
* better highscore form validation
|
||||||
|
* timer integrated (not in use yet)
|
||||||
|
* "your screen is too small to play in landscape view" message removed
|
||||||
|
* fix number of points for eating a ghost
|
||||||
|
|
||||||
|
*Version 0.9 - 15.10.2015*
|
||||||
|
* different difficulties depending on level
|
||||||
|
* scatter / chase indicated through wall colour
|
||||||
|
* extended instructions
|
||||||
|
|
||||||
|
*Version 0.87 - 08.10.2015*
|
||||||
|
* fix a bug that allowed resuming a game after game over
|
||||||
|
|
||||||
|
*Version 0.86 - 25.05.2015*
|
||||||
|
* some security fixes to avoid cheaters from adding highscores
|
||||||
|
|
||||||
|
*Version 0.84 - 09.11.2014*
|
||||||
|
* fixed bug that caused game to crash when leaving game area to the right side while holding the right arrow
|
||||||
|
|
||||||
|
*Version 0.83 - 07.05.2014*
|
||||||
|
* not possible to stop by turning into walls anymore
|
||||||
|
* mute / unmute the game by pressing the "M" key
|
||||||
|
|
||||||
|
*Version 0.82 - 02.04.2014*
|
||||||
|
* small bugfixes
|
||||||
|
* swipe gestures detection on the whole screen not only game area
|
||||||
|
|
||||||
|
*Version 0.81 - 16.03.2014*
|
||||||
|
* Ghost Modes Scatter & Chase
|
||||||
|
* Pathfinding AI for Blinky
|
||||||
|
* Ghosts need to return to Ghost House when dead
|
||||||
|
|
||||||
|
*Version 0.8 - 13.11.2013*
|
||||||
|
* lots of small changes in the backend
|
||||||
|
* when you go in landscape mode and your screen is too small to display the whole site, you get notified to rotate your phone into portrait mode
|
||||||
|
* all onClick and onMousedown in HTML removed and replaced by EventListeners in JavaScript
|
||||||
|
* Pacman Canvas now uses ApplicationCache to cache its content, so you can play the game offline!
|
||||||
|
|
||||||
|
*Version 0.78 - 05.11.2013*
|
||||||
|
* navigation via buttons should be less delayed by using onMouseDown event instead of onClick
|
||||||
|
* refreshRate is now a game attribute and could be changed easily during the game (not yet implemented in frontend)
|
||||||
|
|
||||||
|
*Version 0.77 - 24.05.2013*
|
||||||
|
* Ghosts start to blink before to undazzle
|
||||||
|
* Pacman now dies with style
|
||||||
|
|
||||||
|
*Version 0.76 - 02.05.2013*
|
||||||
|
* You can now use the usual arrow keys to control pacman
|
||||||
|
* fixed 2 small bugs regarding KeyEvents
|
||||||
|
|
||||||
|
*Version 0.75 - 28.04.2013*
|
||||||
|
* You can pause / resume the game by pressing SPACE
|
||||||
|
* ESC is no longer used to pause / resume, but to go back to the main view
|
||||||
|
* Game Menu only showing while game is paused
|
||||||
|
* some css tweaks
|
||||||
|
* Simple Highscore implemented using Ajax, Json and Sqlite3
|
||||||
|
|
||||||
|
*Version 0.74 - 25.04.2013*
|
||||||
|
* You can pause / resume the game by pressing ESC or clicking into canvas
|
||||||
|
* Swipe Gestures using hammerjs
|
||||||
|
* replaced alerts by nice html overlay messages
|
||||||
|
|
||||||
|
*Version 0.73 - 17.04.2013*
|
||||||
|
* You can play on until you lost all your 3 lives
|
||||||
|
* Ghosts state gets reset everytime they get eaten or new level starts
|
||||||
|
|
||||||
|
*Version 0.72 - 30.01.2013*
|
||||||
|
* Ghost Base Door
|
||||||
|
* Reset Game after winning
|
||||||
|
|
||||||
|
*Version 0.71 - 30.01.2013*
|
||||||
|
* Ghosts can die too
|
||||||
|
|
||||||
|
*Version 0.7 - 29.01.2013*
|
||||||
|
* Powerpills & Beastmode
|
||||||
|
|
||||||
|
*Version 0.63 - 29.01.2013*
|
||||||
|
* Pills now get loaded over external json file (map.json)
|
||||||
|
* ghost collisions implemented -> dying
|
||||||
|
* tried to clean up the code a bit
|
||||||
|
|
||||||
|
*Version 0.62 - 23.01.2013*
|
||||||
|
* disable zoom on Mobile
|
||||||
|
* change name to Pacman Canvas (Alpha)
|
||||||
|
|
||||||
|
*Version 0.61 - 12.01.2013*
|
||||||
|
* all walls defined (incl. collisions)
|
||||||
|
|
||||||
|
*Version 0.6 - 12.01.2013*
|
||||||
|
* small fixes for mobile view
|
||||||
|
* sound control (default: muted)
|
||||||
|
* collision control for walls
|
||||||
|
* json datastructure design for all game objects (pills, magic pills, walls)
|
||||||
|
|
||||||
|
*Version 0.41 - 10.12.2012*
|
||||||
|
* Mobile Design Fix
|
||||||
|
* New Icon
|
||||||
|
|
||||||
|
*Version 0.40 - 08.12.2012*
|
||||||
|
* Control Buttons for mobile
|
||||||
|
* Small Design Updates
|
||||||
|
|
||||||
|
*Version 0.30 - 05.12.2012*
|
||||||
|
* Touch Support via jGestures
|
||||||
|
* Responsive
|
||||||
|
|
||||||
|
*Version 0.20 - 22.11.2012*
|
||||||
|
* Code Refactored for further development
|
||||||
|
* Sound added
|
||||||
|
* Appcache implemented
|
||||||
|
|
||||||
|
*Version 0.13 - 29.10.2012*
|
||||||
|
* Never miss a dot: Pacman now always stays in the grid.
|
||||||
|
|
||||||
|
*Version 0.12 - 19.10.2012*
|
||||||
|
* Pacman is now able to eat the dots. Eating a dot equals 10 points for now.
|
||||||
|
* LiveScore implemented.
|
||||||
|
* Game ends when all dots are eaten.
|
||||||
|
|
||||||
|
*Version 0.11 - 15.10.2012*
|
||||||
|
* Placing white Dots and storing them in a Hashtable
|
||||||
|
* Monster/Ghost Prototype
|
||||||
|
* Score Prototype
|
||||||
|
* Pacman had to get smaller (r=15px)
|
||||||
|
* Display Grid
|
||||||
|
* Refactoring HTML
|
||||||
|
|
||||||
|
*Version 0.10 - 23.08.2012*
|
||||||
|
* Started cleaning up the code using Objects
|
||||||
|
* Pacman now turns around when changing directions
|
1
html/ads.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
google.com, pub-0176206735745791, DIRECT, f08c47fec0942fa0
|
158
html/bump_version.sh
Executable file
@ -0,0 +1,158 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#region globalvars
|
||||||
|
option=$1
|
||||||
|
abort=false
|
||||||
|
currentVersion=''
|
||||||
|
newVersion=''
|
||||||
|
currentDateTime=$(date +"%Y-%m-%d %T")
|
||||||
|
currentDate=$(date +"%Y-%m-%d")
|
||||||
|
|
||||||
|
#region functions
|
||||||
|
|
||||||
|
function showHelp {
|
||||||
|
echo 'Parameter invalid / missing.'
|
||||||
|
echo ''
|
||||||
|
echo 'usage:'
|
||||||
|
echo ''
|
||||||
|
echo ' bump_version [patch|minor|major]'
|
||||||
|
echo ''
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkParameters {
|
||||||
|
# check if parameter provided
|
||||||
|
if [ -z $option ];
|
||||||
|
then
|
||||||
|
showHelp
|
||||||
|
abort=true
|
||||||
|
else
|
||||||
|
case $option in
|
||||||
|
patch)
|
||||||
|
# echo "patch"
|
||||||
|
;;
|
||||||
|
minor)
|
||||||
|
# echo "minor"
|
||||||
|
;;
|
||||||
|
major)
|
||||||
|
# echo "major"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
showHelp
|
||||||
|
abort=true
|
||||||
|
return
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
echo "bump ${option} version"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# use package.json as the source of truth
|
||||||
|
function read_current_version {
|
||||||
|
currentVersion=$(echo "$var1" | (grep version package.json | sed 's/.*"version": "\(.*\)".*/\1/'))
|
||||||
|
echo "currentVersion=${currentVersion}"
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_new_version {
|
||||||
|
local currentMajor=$(echo "$var1" | (echo "${currentVersion}" | awk -F'.' '{print $1}'))
|
||||||
|
local currentMinor=$(echo "$var1" | (echo "${currentVersion}" | awk -F'.' '{print $2}'))
|
||||||
|
local currentPatch=$(echo "$var1" | (echo "${currentVersion}" | awk -F'.' '{print $3}'))
|
||||||
|
|
||||||
|
echo "${currentMajor} ${currentMinor} ${currentPatch}"
|
||||||
|
case $option in
|
||||||
|
patch)
|
||||||
|
let "newPatch = $currentPatch + 1"
|
||||||
|
newVersion="${currentMajor}.${currentMinor}.${newPatch}"
|
||||||
|
echo "newVersion=${newVersion}"
|
||||||
|
;;
|
||||||
|
minor)
|
||||||
|
let "newMinor = $currentMinor + 1"
|
||||||
|
newVersion="${currentMajor}.${newMinor}.0"
|
||||||
|
echo "newVersion=${newVersion}"
|
||||||
|
;;
|
||||||
|
major)
|
||||||
|
let "newMajor = $currentMajor + 1"
|
||||||
|
newVersion="${newMajor}.0.0"
|
||||||
|
echo "newVersion=${newVersion}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
function search_replace_in_file {
|
||||||
|
local file=$1
|
||||||
|
local search=$2
|
||||||
|
local replace=$3
|
||||||
|
|
||||||
|
sed -i "" "s/${search}/${replace}/g" $file
|
||||||
|
}
|
||||||
|
|
||||||
|
function write_new_version {
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Update files to ${newVersion} (${currentDateTime}):"
|
||||||
|
|
||||||
|
echo " package.json"
|
||||||
|
local line="\"version\": \".*\""
|
||||||
|
local rep="\"version\": \"${newVersion}\""
|
||||||
|
sed -i "" "s/${line}/${rep}/g" package.json
|
||||||
|
|
||||||
|
# in package-lock.json we only want to replace the very first occurence
|
||||||
|
echo " package-lock.json"
|
||||||
|
sed -e "/${line}/{s//${rep}/;:a" -e '$!N;$!ba' -e '}' package-lock.json > tmp && mv tmp package-lock.json
|
||||||
|
|
||||||
|
|
||||||
|
# TODO: update last_update
|
||||||
|
echo " web-app-manifest.json"
|
||||||
|
sed -i "" "s/${line}/${rep}/g" web-app-manifest.json
|
||||||
|
|
||||||
|
# TODO: update last_update
|
||||||
|
echo " manifest.json"
|
||||||
|
sed -i "" "s/${line}/${rep}/g" manifest.json
|
||||||
|
|
||||||
|
# TODO: update last_update
|
||||||
|
echo " pacman-canvas.webapp"
|
||||||
|
sed -i "" "s/${line}/${rep}/g" pacman-canvas.webapp
|
||||||
|
|
||||||
|
echo " cache.manifest"
|
||||||
|
local line="# Pacman .*"
|
||||||
|
local rep="# Pacman ${newVersion} ${currentDateTime}"
|
||||||
|
sed -i "" "s/${line}/${rep}/g" cache.manifest
|
||||||
|
|
||||||
|
echo " index.htm"
|
||||||
|
local line="<span class=\"app-version\">.*<\/span>"
|
||||||
|
local rep="<span class=\"app-version\">${newVersion} (${currentDate})<\/span>"
|
||||||
|
sed -i "" "s/${line}/${rep}/g" index.htm
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "All files up to date. New Version ${newVersion} (${currentDateTime})."
|
||||||
|
echo "Don't forget to update README.md and to set the git tag."
|
||||||
|
}
|
||||||
|
|
||||||
|
function run {
|
||||||
|
# local option="${1}"
|
||||||
|
|
||||||
|
echo "run ${option}"
|
||||||
|
|
||||||
|
checkParameters
|
||||||
|
|
||||||
|
if [[ ${abort} == true ]];
|
||||||
|
then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "bump version $option"
|
||||||
|
|
||||||
|
read_current_version
|
||||||
|
get_new_version
|
||||||
|
|
||||||
|
# TODO: user confirmation
|
||||||
|
|
||||||
|
write_new_version
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region main
|
||||||
|
|
||||||
|
run
|
||||||
|
|
||||||
|
#endregion
|
60
html/cache.manifest
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
CACHE MANIFEST
|
||||||
|
# Pacman 1.0.5 2021-03-22 22:19:50
|
||||||
|
|
||||||
|
CACHE:
|
||||||
|
|
||||||
|
# HTML
|
||||||
|
index.htm
|
||||||
|
|
||||||
|
# CSS
|
||||||
|
pacman-canvas.css
|
||||||
|
|
||||||
|
# external resources
|
||||||
|
style.css
|
||||||
|
img/bg-pattern-black.png
|
||||||
|
|
||||||
|
# fonts
|
||||||
|
fonts/PressStart2Play.eot
|
||||||
|
fonts/PressStart2Play.woff
|
||||||
|
fonts/PressStart2Play.ttf
|
||||||
|
|
||||||
|
# JavaScript
|
||||||
|
pacman-canvas.js
|
||||||
|
js/jquery-1.10.2.min.js
|
||||||
|
js/jquery.hammer.min.js
|
||||||
|
|
||||||
|
# data
|
||||||
|
data/map.json
|
||||||
|
|
||||||
|
# images
|
||||||
|
img/blinky.svg
|
||||||
|
img/clyde.svg
|
||||||
|
img/inky.svg
|
||||||
|
img/pinky.svg
|
||||||
|
img/dazzled.svg
|
||||||
|
img/dazzled2.svg
|
||||||
|
img/dead.svg
|
||||||
|
img/heart.png
|
||||||
|
img/audio-icon.png
|
||||||
|
img/audio-icon-mute.png
|
||||||
|
img/platzh1rsch-logo.png
|
||||||
|
img/instructions/instructions_chase.PNG
|
||||||
|
img/instructions/instructions_scatter.PNG
|
||||||
|
img/instructions/instructions_powerpill.PNG
|
||||||
|
|
||||||
|
# MP3
|
||||||
|
mp3/die.mp3
|
||||||
|
mp3/eatghost.mp3
|
||||||
|
mp3/powerpill.mp3
|
||||||
|
mp3/theme.mp3
|
||||||
|
mp3/waka.mp3
|
||||||
|
|
||||||
|
# WAV
|
||||||
|
wav/die.wav
|
||||||
|
wav/eatghost.wav
|
||||||
|
wav/powerpill.wav
|
||||||
|
wav/theme.wav
|
||||||
|
wav/waka.wav
|
||||||
|
|
||||||
|
NETWORK:
|
||||||
|
*
|
118
html/data/db-handler.php
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
<?php header('Content-Type: application/json');
|
||||||
|
|
||||||
|
/* IMPORTANT:
|
||||||
|
* change this to the main url of where you host the application, otherwise, every entry will be marked as a cheater
|
||||||
|
*/
|
||||||
|
$hostdomain = 'pacman.platzh1rsch.ch';
|
||||||
|
|
||||||
|
if (isset($_POST['action'])) {
|
||||||
|
switch ($_POST['action']) {
|
||||||
|
case 'get':
|
||||||
|
if (isset($_POST['page'])) {
|
||||||
|
echo getHighscore($_POST['page']);
|
||||||
|
} else {
|
||||||
|
echo getHighscore();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'add':
|
||||||
|
if (isset($_POST['name']) || isset($_POST['score']) || isset($_POST['level']))
|
||||||
|
echo addHighscore($_POST['name'], $_POST['score'], $_POST['level']);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if (isset($_GET['action'])) {
|
||||||
|
if ($_GET['action'] == 'get') {
|
||||||
|
if (isset($_GET['page'])) {
|
||||||
|
echo getHighscore($_GET['page']);
|
||||||
|
} else {
|
||||||
|
echo getHighscore();
|
||||||
|
}
|
||||||
|
} else if ($_GET['action'] == 'version') {
|
||||||
|
echo getVersionInfo();
|
||||||
|
}
|
||||||
|
} else echo "define action to call";
|
||||||
|
|
||||||
|
|
||||||
|
function getVersionInfo()
|
||||||
|
{
|
||||||
|
$strJsonFileContents = file_get_contents("../package.json");
|
||||||
|
// Convert to array
|
||||||
|
$array = json_decode($strJsonFileContents, true);
|
||||||
|
|
||||||
|
$response["version"] = $array["version"];
|
||||||
|
|
||||||
|
if (!isset($response) || is_null($response)) {
|
||||||
|
return "[]";
|
||||||
|
} else {
|
||||||
|
return json_encode($response);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getHighscore($page = 1)
|
||||||
|
{
|
||||||
|
|
||||||
|
$db = new SQLite3('pacman.db');
|
||||||
|
createDataBase($db);
|
||||||
|
$results = $db->query('SELECT name, score FROM highscore WHERE cheater = 0 AND name != "" ORDER BY score DESC LIMIT 10 OFFSET ' . ($page - 1) * 10);
|
||||||
|
while ($row = $results->fetchArray()) {
|
||||||
|
$tmp["name"] = htmlspecialchars($row['name']);
|
||||||
|
$tmp["score"] = strval($row['score']);
|
||||||
|
$response[] = $tmp;
|
||||||
|
}
|
||||||
|
if (!isset($response) || is_null($response)) {
|
||||||
|
return "[]";
|
||||||
|
} else {
|
||||||
|
return json_encode($response);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function addHighscore($name, $score, $level)
|
||||||
|
{
|
||||||
|
|
||||||
|
global $hostdomain;
|
||||||
|
|
||||||
|
$db = new SQLite3('pacman.db');
|
||||||
|
$date = date('Y-m-d h:i:s', time());
|
||||||
|
createDataBase($db);
|
||||||
|
$ref = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : "";
|
||||||
|
$ua = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : "";
|
||||||
|
$remA = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : "";
|
||||||
|
$remH = isset($_SERVER['REMOTE_HOST']) ? $_SERVER['REMOTE_HOST'] : "";
|
||||||
|
|
||||||
|
// some simple checks to avoid cheaters
|
||||||
|
$ref_assert = preg_match('/http(s)?:\/\/.*' . $hostdomain . '/', $ref) > 0;
|
||||||
|
$ua_assert = ($ua != "");
|
||||||
|
$cheater = 0;
|
||||||
|
if (!$ref_assert || !$ua_assert) {
|
||||||
|
$cheater = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$maxlvlpoints_pills = 104 * 10;
|
||||||
|
$maxlvlpoints_powerpills = 4 * 50;
|
||||||
|
$maxlvlpoints_ghosts = 4 * 4 * 100;
|
||||||
|
$maxlvlpoints = $maxlvlpoints_pills + $maxlvlpoints_powerpills + $maxlvlpoints_ghosts;
|
||||||
|
|
||||||
|
// check if score is even possible
|
||||||
|
if ($level < 1 || $level > 10) {
|
||||||
|
$cheater = 1;
|
||||||
|
} else if (($score / $level) > $maxlvlpoints) {
|
||||||
|
$cheater = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$name_clean = htmlspecialchars($name);
|
||||||
|
$score_clean = htmlspecialchars($score);
|
||||||
|
|
||||||
|
$db->exec('INSERT INTO highscore (name, score, level, date, log_referer, log_user_agent, log_remote_addr, log_remote_host, cheater)VALUES(?,?,?,?,?,?,?,?,?)', $name_clean, $score_clean, $level, $date, $ref, $ua, $remA, $remH, $cheater);
|
||||||
|
|
||||||
|
|
||||||
|
$response['status'] = "success";
|
||||||
|
$response['level'] = $level;
|
||||||
|
$response['name'] = $name;
|
||||||
|
$response['score'] = $score;
|
||||||
|
$response['cheater'] = $cheater;
|
||||||
|
return json_encode($response);
|
||||||
|
}
|
||||||
|
|
||||||
|
function createDataBase($db)
|
||||||
|
{
|
||||||
|
$db->exec('CREATE TABLE IF NOT EXISTS highscore(name VARCHAR(60),score INT, level INT, date DATETIME, log_referer VARCHAR(200), log_user_agent VARCHAR(200), log_remote_addr VARCHAR(200), log_remote_host VARCHAR(200), cheater BOOLEAN)');
|
||||||
|
}
|
305
html/data/map.json
Normal file
@ -0,0 +1,305 @@
|
|||||||
|
{
|
||||||
|
"posY" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"row": 1,
|
||||||
|
"posX": [
|
||||||
|
{ "col": 1, "type": "wall" },
|
||||||
|
{ "col": 2, "type": "wall" },
|
||||||
|
{ "col": 3, "type": "wall" },
|
||||||
|
{ "col": 4, "type": "wall" },
|
||||||
|
{ "col": 5, "type": "wall" },
|
||||||
|
{ "col": 6, "type": "wall" },
|
||||||
|
{ "col": 7, "type": "wall" },
|
||||||
|
{ "col": 8, "type": "wall" },
|
||||||
|
{ "col": 9, "type": "wall" },
|
||||||
|
{ "col": 10, "type": "wall" },
|
||||||
|
{ "col": 11, "type": "wall" },
|
||||||
|
{ "col": 12, "type": "wall" },
|
||||||
|
{ "col": 13, "type": "wall" },
|
||||||
|
{ "col": 14, "type": "wall" },
|
||||||
|
{ "col": 15, "type": "wall" },
|
||||||
|
{ "col": 16, "type": "wall" },
|
||||||
|
{ "col": 17, "type": "wall" },
|
||||||
|
{ "col": 18, "type": "wall" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"row": 2,
|
||||||
|
"posX": [
|
||||||
|
{ "col": 1, "type": "wall" },
|
||||||
|
{ "col": 2, "type": "powerpill" },
|
||||||
|
{ "col": 3, "type": "pill" },
|
||||||
|
{ "col": 4, "type": "pill" },
|
||||||
|
{ "col": 5, "type": "wall" },
|
||||||
|
{ "col": 6, "type": "pill" },
|
||||||
|
{ "col": 7, "type": "pill" },
|
||||||
|
{ "col": 8, "type": "pill" },
|
||||||
|
{ "col": 9, "type": "pill" },
|
||||||
|
{ "col": 10, "type": "pill" },
|
||||||
|
{ "col": 11, "type": "pill" },
|
||||||
|
{ "col": 12, "type": "pill" },
|
||||||
|
{ "col": 13, "type": "pill" },
|
||||||
|
{ "col": 14, "type": "wall" },
|
||||||
|
{ "col": 15, "type": "pill" },
|
||||||
|
{ "col": 16, "type": "pill" },
|
||||||
|
{ "col": 17, "type": "powerpill" },
|
||||||
|
{ "col": 18, "type": "wall" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"row": 3,
|
||||||
|
"posX": [
|
||||||
|
{ "col": 1, "type": "wall" },
|
||||||
|
{ "col": 2, "type": "pill" },
|
||||||
|
{ "col": 3, "type": "wall" },
|
||||||
|
{ "col": 4, "type": "pill" },
|
||||||
|
{ "col": 5, "type": "pill" },
|
||||||
|
{ "col": 6, "type": "pill" },
|
||||||
|
{ "col": 7, "type": "wall" },
|
||||||
|
{ "col": 8, "type": "wall" },
|
||||||
|
{ "col": 9, "type": "pill" },
|
||||||
|
{ "col": 10, "type": "pill" },
|
||||||
|
{ "col": 11, "type": "wall" },
|
||||||
|
{ "col": 12, "type": "wall" },
|
||||||
|
{ "col": 13, "type": "pill" },
|
||||||
|
{ "col": 14, "type": "pill" },
|
||||||
|
{ "col": 15, "type": "pill" },
|
||||||
|
{ "col": 16, "type": "wall" },
|
||||||
|
{ "col": 17, "type": "pill" },
|
||||||
|
{ "col": 18, "type": "wall" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"row": 4,
|
||||||
|
"posX": [
|
||||||
|
{ "col": 1, "type": "wall" },
|
||||||
|
{ "col": 2, "type": "pill" },
|
||||||
|
{ "col": 3, "type": "wall" },
|
||||||
|
{ "col": 4, "type": "wall" },
|
||||||
|
{ "col": 5, "type": "pill" },
|
||||||
|
{ "col": 6, "type": "wall" },
|
||||||
|
{ "col": 7, "type": "pill" },
|
||||||
|
{ "col": 8, "type": "pill" },
|
||||||
|
{ "col": 9, "type": "pill" },
|
||||||
|
{ "col": 10, "type": "pill" },
|
||||||
|
{ "col": 11, "type": "pill" },
|
||||||
|
{ "col": 12, "type": "pill" },
|
||||||
|
{ "col": 13, "type": "wall" },
|
||||||
|
{ "col": 14, "type": "pill" },
|
||||||
|
{ "col": 15, "type": "wall" },
|
||||||
|
{ "col": 16, "type": "wall" },
|
||||||
|
{ "col": 17, "type": "pill" },
|
||||||
|
{ "col": 18, "type": "wall" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"row": 5,
|
||||||
|
"posX": [
|
||||||
|
{ "col": 1, "type": "wall" },
|
||||||
|
{ "col": 2, "type": "pill" },
|
||||||
|
{ "col": 3, "type": "pill" },
|
||||||
|
{ "col": 4, "type": "wall" },
|
||||||
|
{ "col": 5, "type": "pill" },
|
||||||
|
{ "col": 6, "type": "pill" },
|
||||||
|
{ "col": 7, "type": "pill" },
|
||||||
|
{ "col": 8, "type": "wall" },
|
||||||
|
{ "col": 9, "type": "door" },
|
||||||
|
{ "col": 10, "type": "door" },
|
||||||
|
{ "col": 11, "type": "wall" },
|
||||||
|
{ "col": 12, "type": "pill" },
|
||||||
|
{ "col": 13, "type": "pill" },
|
||||||
|
{ "col": 14, "type": "pill" },
|
||||||
|
{ "col": 15, "type": "wall" },
|
||||||
|
{ "col": 16, "type": "pill" },
|
||||||
|
{ "col": 17, "type": "pill" },
|
||||||
|
{ "col": 18, "type": "wall" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"row": 6,
|
||||||
|
"posX": [
|
||||||
|
{ "col": 1, "type": "wall" },
|
||||||
|
{ "col": 2, "type": "wall" },
|
||||||
|
{ "col": 3, "type": "pill" },
|
||||||
|
{ "col": 4, "type": "wall" },
|
||||||
|
{ "col": 5, "type": "wall" },
|
||||||
|
{ "col": 6, "type": "pill" },
|
||||||
|
{ "col": 7, "type": "wall" },
|
||||||
|
{ "col": 8, "type": "null" },
|
||||||
|
{ "col": 9, "type": "null" },
|
||||||
|
{ "col": 10, "type": "null" },
|
||||||
|
{ "col": 11, "type": "null" },
|
||||||
|
{ "col": 12, "type": "wall" },
|
||||||
|
{ "col": 13, "type": "pill" },
|
||||||
|
{ "col": 14, "type": "wall" },
|
||||||
|
{ "col": 15, "type": "wall" },
|
||||||
|
{ "col": 16, "type": "pill" },
|
||||||
|
{ "col": 17, "type": "wall" },
|
||||||
|
{ "col": 18, "type": "wall" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"row": 7,
|
||||||
|
"posX": [
|
||||||
|
{ "col": 1, "type": "pill" },
|
||||||
|
{ "col": 2, "type": "pill" },
|
||||||
|
{ "col": 3, "type": "pill" },
|
||||||
|
{ "col": 4, "type": "pill" },
|
||||||
|
{ "col": 5, "type": "pill" },
|
||||||
|
{ "col": 6, "type": "pill" },
|
||||||
|
{ "col": 7, "type": "wall" },
|
||||||
|
{ "col": 8, "type": "wall" },
|
||||||
|
{ "col": 9, "type": "wall" },
|
||||||
|
{ "col": 10, "type": "wall" },
|
||||||
|
{ "col": 11, "type": "wall" },
|
||||||
|
{ "col": 12, "type": "wall" },
|
||||||
|
{ "col": 13, "type": "pill" },
|
||||||
|
{ "col": 14, "type": "pill" },
|
||||||
|
{ "col": 15, "type": "pill" },
|
||||||
|
{ "col": 16, "type": "pill" },
|
||||||
|
{ "col": 17, "type": "pill" },
|
||||||
|
{ "col": 18, "type": "pill" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"row": 8,
|
||||||
|
"posX": [
|
||||||
|
{ "col": 1, "type": "wall" },
|
||||||
|
{ "col": 2, "type": "wall" },
|
||||||
|
{ "col": 3, "type": "pill" },
|
||||||
|
{ "col": 4, "type": "wall" },
|
||||||
|
{ "col": 5, "type": "wall" },
|
||||||
|
{ "col": 6, "type": "pill" },
|
||||||
|
{ "col": 7, "type": "pill" },
|
||||||
|
{ "col": 8, "type": "pill" },
|
||||||
|
{ "col": 9, "type": "pill" },
|
||||||
|
{ "col": 10, "type": "pill" },
|
||||||
|
{ "col": 11, "type": "pill" },
|
||||||
|
{ "col": 12, "type": "pill" },
|
||||||
|
{ "col": 13, "type": "pill" },
|
||||||
|
{ "col": 14, "type": "wall" },
|
||||||
|
{ "col": 15, "type": "wall" },
|
||||||
|
{ "col": 16, "type": "pill" },
|
||||||
|
{ "col": 17, "type": "wall" },
|
||||||
|
{ "col": 18, "type": "wall" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"row": 9,
|
||||||
|
"posX": [
|
||||||
|
{ "col": 1, "type": "wall" },
|
||||||
|
{ "col": 2, "type": "wall" },
|
||||||
|
{ "col": 3, "type": "pill" },
|
||||||
|
{ "col": 4, "type": "wall" },
|
||||||
|
{ "col": 5, "type": "wall" },
|
||||||
|
{ "col": 6, "type": "wall" },
|
||||||
|
{ "col": 7, "type": "wall" },
|
||||||
|
{ "col": 8, "type": "wall" },
|
||||||
|
{ "col": 9, "type": "pill" },
|
||||||
|
{ "col": 10, "type": "pill" },
|
||||||
|
{ "col": 11, "type": "wall" },
|
||||||
|
{ "col": 12, "type": "wall" },
|
||||||
|
{ "col": 13, "type": "wall" },
|
||||||
|
{ "col": 14, "type": "wall" },
|
||||||
|
{ "col": 15, "type": "wall" },
|
||||||
|
{ "col": 16, "type": "pill" },
|
||||||
|
{ "col": 17, "type": "wall" },
|
||||||
|
{ "col": 18, "type": "wall" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"row": 10,
|
||||||
|
"posX": [
|
||||||
|
{ "col": 1, "type": "wall" },
|
||||||
|
{ "col": 2, "type": "pill" },
|
||||||
|
{ "col": 3, "type": "pill" },
|
||||||
|
{ "col": 4, "type": "pill" },
|
||||||
|
{ "col": 5, "type": "wall" },
|
||||||
|
{ "col": 6, "type": "wall" },
|
||||||
|
{ "col": 7, "type": "pill" },
|
||||||
|
{ "col": 8, "type": "pill" },
|
||||||
|
{ "col": 9, "type": "pill" },
|
||||||
|
{ "col": 10, "type": "pill" },
|
||||||
|
{ "col": 11, "type": "pill" },
|
||||||
|
{ "col": 12, "type": "pill" },
|
||||||
|
{ "col": 13, "type": "wall" },
|
||||||
|
{ "col": 14, "type": "wall" },
|
||||||
|
{ "col": 15, "type": "pill" },
|
||||||
|
{ "col": 16, "type": "pill" },
|
||||||
|
{ "col": 17, "type": "pill" },
|
||||||
|
{ "col": 18, "type": "wall" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"row": 11,
|
||||||
|
"posX": [
|
||||||
|
{ "col": 1, "type": "wall" },
|
||||||
|
{ "col": 2, "type": "pill" },
|
||||||
|
{ "col": 3, "type": "wall" },
|
||||||
|
{ "col": 4, "type": "pill" },
|
||||||
|
{ "col": 5, "type": "pill" },
|
||||||
|
{ "col": 6, "type": "pill" },
|
||||||
|
{ "col": 7, "type": "pill" },
|
||||||
|
{ "col": 8, "type": "wall" },
|
||||||
|
{ "col": 9, "type": "wall" },
|
||||||
|
{ "col": 10, "type": "wall" },
|
||||||
|
{ "col": 11, "type": "wall" },
|
||||||
|
{ "col": 12, "type": "pill" },
|
||||||
|
{ "col": 13, "type": "pill" },
|
||||||
|
{ "col": 14, "type": "pill" },
|
||||||
|
{ "col": 15, "type": "pill" },
|
||||||
|
{ "col": 16, "type": "wall" },
|
||||||
|
{ "col": 17, "type": "pill" },
|
||||||
|
{ "col": 18, "type": "wall" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"row": 12,
|
||||||
|
"posX": [
|
||||||
|
{ "col": 1, "type": "wall" },
|
||||||
|
{ "col": 2, "type": "powerpill" },
|
||||||
|
{ "col": 3, "type": "pill" },
|
||||||
|
{ "col": 4, "type": "pill" },
|
||||||
|
{ "col": 5, "type": "wall" },
|
||||||
|
{ "col": 6, "type": "wall" },
|
||||||
|
{ "col": 7, "type": "pill" },
|
||||||
|
{ "col": 8, "type": "pill" },
|
||||||
|
{ "col": 9, "type": "pill" },
|
||||||
|
{ "col": 10, "type": "pill" },
|
||||||
|
{ "col": 11, "type": "pill" },
|
||||||
|
{ "col": 12, "type": "pill" },
|
||||||
|
{ "col": 13, "type": "wall" },
|
||||||
|
{ "col": 14, "type": "wall" },
|
||||||
|
{ "col": 15, "type": "pill" },
|
||||||
|
{ "col": 16, "type": "pill" },
|
||||||
|
{ "col": 17, "type": "powerpill" },
|
||||||
|
{ "col": 18, "type": "wall" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"row": 13,
|
||||||
|
"posX": [
|
||||||
|
{ "col": 1, "type": "wall" },
|
||||||
|
{ "col": 2, "type": "wall" },
|
||||||
|
{ "col": 3, "type": "wall" },
|
||||||
|
{ "col": 4, "type": "wall" },
|
||||||
|
{ "col": 5, "type": "wall" },
|
||||||
|
{ "col": 6, "type": "wall" },
|
||||||
|
{ "col": 7, "type": "wall" },
|
||||||
|
{ "col": 8, "type": "wall" },
|
||||||
|
{ "col": 9, "type": "wall" },
|
||||||
|
{ "col": 10, "type": "wall" },
|
||||||
|
{ "col": 11, "type": "wall" },
|
||||||
|
{ "col": 12, "type": "wall" },
|
||||||
|
{ "col": 13, "type": "wall" },
|
||||||
|
{ "col": 14, "type": "wall" },
|
||||||
|
{ "col": 15, "type": "wall" },
|
||||||
|
{ "col": 16, "type": "wall" },
|
||||||
|
{ "col": 17, "type": "wall" },
|
||||||
|
{ "col": 18, "type": "wall" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
BIN
html/fonts/PressStart2Play.eot
Normal file
BIN
html/fonts/PressStart2Play.ttf
Normal file
BIN
html/fonts/PressStart2Play.woff
Normal file
1
html/googlee6aee5a894225e60.html
Normal file
@ -0,0 +1 @@
|
|||||||
|
google-site-verification: googlee6aee5a894225e60.html
|
BIN
html/img/Icon-106x106.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
html/img/Icon-130x130.png
Normal file
After Width: | Height: | Size: 4.4 KiB |
BIN
html/img/Icon-150x130.png
Normal file
After Width: | Height: | Size: 4.4 KiB |
BIN
html/img/Icon-200x200.png
Normal file
After Width: | Height: | Size: 6.8 KiB |
BIN
html/img/Icon-300x300.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
html/img/Icon-32x32.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
html/img/Icon-512x512.png
Normal file
After Width: | Height: | Size: 20 KiB |
106
html/img/Pacman-Icon.svg
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="128"
|
||||||
|
height="128"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.48.2 r9819"
|
||||||
|
sodipodi:docname="Pacman-Icon.svg"
|
||||||
|
inkscape:export-filename="C:\Users\chregi\Documents\GitHub\pacman-canvas\img\Pacman-Icon.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<title
|
||||||
|
id="title3755">Pacman-Icon</title>
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1"
|
||||||
|
inkscape:cx="-101.68133"
|
||||||
|
inkscape:cy="17.658003"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer3"
|
||||||
|
showgrid="false"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
inkscape:window-width="1600"
|
||||||
|
inkscape:window-height="838"
|
||||||
|
inkscape:window-x="-8"
|
||||||
|
inkscape:window-y="-8"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title>Pacman-Icon</dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer4"
|
||||||
|
inkscape:label="BG">
|
||||||
|
<rect
|
||||||
|
style="fill:#333333;fill-opacity:1;stroke:#000000;stroke-width:0.99040616000000004;stroke-opacity:0"
|
||||||
|
id="rect4810"
|
||||||
|
width="127.0096"
|
||||||
|
height="127.00959"
|
||||||
|
x="0.49520308"
|
||||||
|
y="0.49520677"
|
||||||
|
ry="25" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
inkscape:label="Ebene 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-205.19915,-422.02019)">
|
||||||
|
<path
|
||||||
|
sodipodi:type="arc"
|
||||||
|
style="fill:#ffdc00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0"
|
||||||
|
id="path2985"
|
||||||
|
sodipodi:cx="315.71429"
|
||||||
|
sodipodi:cy="433.79074"
|
||||||
|
sodipodi:rx="110"
|
||||||
|
sodipodi:ry="115.71429"
|
||||||
|
d="m 415.33852,482.85049 a 110,115.71429 0 1 1 -8.95843,-114.58281 l -90.6658,65.52306 z"
|
||||||
|
transform="matrix(0.47477663,0,0,0.45133087,121.66357,291.58255)"
|
||||||
|
sodipodi:start="0.43782781"
|
||||||
|
sodipodi:end="5.6812379" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer3"
|
||||||
|
inkscape:label="Auge"
|
||||||
|
transform="translate(0,-0.0302887)">
|
||||||
|
<path
|
||||||
|
sodipodi:type="arc"
|
||||||
|
style="fill:#333333;fill-opacity:1;stroke:#000000;stroke-opacity:0"
|
||||||
|
id="path4805"
|
||||||
|
sodipodi:cx="-65.740738"
|
||||||
|
sodipodi:cy="50.715473"
|
||||||
|
sodipodi:rx="13.888889"
|
||||||
|
sodipodi:ry="13.425926"
|
||||||
|
d="m -51.851849,50.715473 a 13.888889,13.425926 0 1 1 -27.777778,0 13.888889,13.425926 0 1 1 27.777778,0 z"
|
||||||
|
transform="matrix(0.69456804,0,0,0.7185187,111.6429,4.3125106)" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.3 KiB |
BIN
html/img/audio-icon-mute.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
html/img/audio-icon.png
Normal file
After Width: | Height: | Size: 917 B |
BIN
html/img/bg-pattern-black.png
Normal file
After Width: | Height: | Size: 24 KiB |
50
html/img/blinky.svg
Executable file
After Width: | Height: | Size: 16 KiB |
120
html/img/blinky_original_not_used.svg
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="60"
|
||||||
|
height="60"
|
||||||
|
id="svg3209"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.48.2 r9819"
|
||||||
|
sodipodi:docname="Neues Dokument 11">
|
||||||
|
<title
|
||||||
|
id="title3238">blinky</title>
|
||||||
|
<defs
|
||||||
|
id="defs3211" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1.4"
|
||||||
|
inkscape:cx="56.727193"
|
||||||
|
inkscape:cy="-67.066627"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1148"
|
||||||
|
inkscape:window-x="-8"
|
||||||
|
inkscape:window-y="-8"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata3214">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title>blinky</dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Ebene 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-620.1475,-462.09155)">
|
||||||
|
<g
|
||||||
|
id="g3048"
|
||||||
|
inkscape:label="#blinky"
|
||||||
|
transform="translate(169.6996,-110.9135)"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<title
|
||||||
|
id="title3056">Blinky</title>
|
||||||
|
<path
|
||||||
|
inkscape:label="#Blinky"
|
||||||
|
style="fill:#ca1111"
|
||||||
|
d="m 453.98527,630.78254 c -1.20261,-1.71697 -1.55219,-4.9583 -1.53689,-14.25 0.0359,-21.77874 2.19013,-29.87068 9.77706,-36.72501 5.18333,-4.68283 10.07002,-6.27246 19.24739,-6.26115 6.37329,0.008 8.45651,0.47101 13.42172,2.98399 11.10162,5.61871 13.56334,12.02522 14.22783,37.02721 0.37412,14.07623 0.26991,15.17032 -1.60658,16.86853 -2.62623,2.3767 -5.53748,1.59732 -10.77301,-2.8841 -2.27268,-1.94533 -4.53179,-3.53696 -5.02024,-3.53696 -0.48844,0 -2.64574,1.8 -4.79398,4 -2.14824,2.2 -4.66557,4 -5.59406,4 -0.9285,0 -3.86642,-1.8 -6.52873,-4 -5.38287,-4.44815 -6.50891,-4.75708 -8.50477,-2.33328 -1.68026,2.04055 -8.87298,7.33328 -9.96577,7.33328 -0.4363,0 -1.49378,-1.00013 -2.34997,-2.22251 z m 28.75904,-24.89453 c 1.20134,-0.61437 2.89994,-2.01574 3.77466,-3.11415 1.57615,-1.97921 1.61346,-1.97404 4.16388,0.57638 3.54047,3.54047 7.20236,4.28434 11.35124,2.30588 3.99841,-1.90671 4.67607,-5.32912 1.1547,-5.83152 -2.47068,-0.35249 -3.68426,-3.59046 -1.58413,-4.22664 4.84428,-1.46744 4.92389,-1.53759 3.90525,-3.44092 -1.36593,-2.55226 -6.46932,-4.52241 -9.64805,-3.7246 -1.43304,0.35967 -3.73322,1.78163 -5.11151,3.15992 l -2.50598,2.50598 -2.32267,-2.5062 c -4.5492,-4.90867 -12.1154,-4.15202 -15.04029,1.5041 -1.77559,3.43363 -1.79018,5.67231 -0.0573,8.79874 2.44707,4.41505 7.67237,6.16541 11.92024,3.99303 z m -0.93574,-7.33507 c -0.7754,-2.02068 0.3778,-3.54789 2.67902,-3.54789 1.40371,0 1.94098,0.692 1.94098,2.5 0,1.84621 -0.53124,2.5 -2.03139,2.5 -1.11726,0 -2.28213,-0.65345 -2.58861,-1.45211 z"
|
||||||
|
id="Blinky"
|
||||||
|
inkscape:connector-curvature="0">
|
||||||
|
<title
|
||||||
|
id="title3046">Blinky</title>
|
||||||
|
</path>
|
||||||
|
<path
|
||||||
|
transform="matrix(1.12,0,0,1.0188679,-61.321661,-12.313696)"
|
||||||
|
d="m 507.85713,598.61218 c 0,5.22698 -3.99746,9.46429 -8.92857,9.46429 -4.93112,0 -8.92857,-4.23731 -8.92857,-9.46429 0,-5.22698 3.99745,-9.46428 8.92857,-9.46428 4.93111,0 8.92857,4.2373 8.92857,9.46428 z"
|
||||||
|
sodipodi:ry="9.4642859"
|
||||||
|
sodipodi:rx="8.9285717"
|
||||||
|
sodipodi:cy="598.61218"
|
||||||
|
sodipodi:cx="498.92856"
|
||||||
|
id="path3004"
|
||||||
|
style="fill:#ffffff;fill-opacity:1"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
transform="matrix(1.12,0,0,1.0188679,-79.535934,-12.544555)"
|
||||||
|
d="m 507.85713,598.61218 c 0,5.22698 -3.99746,9.46429 -8.92857,9.46429 -4.93112,0 -8.92857,-4.23731 -8.92857,-9.46429 0,-5.22698 3.99745,-9.46428 8.92857,-9.46428 4.93111,0 8.92857,4.2373 8.92857,9.46428 z"
|
||||||
|
sodipodi:ry="9.4642859"
|
||||||
|
sodipodi:rx="8.9285717"
|
||||||
|
sodipodi:cy="598.61218"
|
||||||
|
sodipodi:cx="498.92856"
|
||||||
|
id="path3004-1"
|
||||||
|
style="fill:#ffffff;fill-opacity:1"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
transform="matrix(1.7599103,0,0,1.6850204,-365.34427,-410.69975)"
|
||||||
|
d="m 485.12575,598.23547 c 0,1.63881 -1.27198,2.96733 -2.84105,2.96733 -1.56907,0 -2.84106,-1.32852 -2.84106,-2.96733 0,-1.6388 1.27199,-2.96732 2.84106,-2.96732 1.56907,0 2.84105,1.32852 2.84105,2.96732 z"
|
||||||
|
sodipodi:ry="2.9673231"
|
||||||
|
sodipodi:rx="2.841054"
|
||||||
|
sodipodi:cy="598.23547"
|
||||||
|
sodipodi:cx="482.2847"
|
||||||
|
id="path3026"
|
||||||
|
style="fill:#0000ff;fill-opacity:1"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
transform="matrix(1.7599103,0,0,1.6850204,-346.35319,-411.00305)"
|
||||||
|
d="m 485.12575,598.23547 c 0,1.63881 -1.27198,2.96733 -2.84105,2.96733 -1.56907,0 -2.84106,-1.32852 -2.84106,-2.96733 0,-1.6388 1.27199,-2.96732 2.84106,-2.96732 1.56907,0 2.84105,1.32852 2.84105,2.96732 z"
|
||||||
|
sodipodi:ry="2.9673231"
|
||||||
|
sodipodi:rx="2.841054"
|
||||||
|
sodipodi:cy="598.23547"
|
||||||
|
sodipodi:cx="482.2847"
|
||||||
|
id="path3026-7"
|
||||||
|
style="fill:#0000ff;fill-opacity:1"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.7 KiB |
50
html/img/clyde.svg
Executable file
After Width: | Height: | Size: 16 KiB |
120
html/img/clyde_original_not_used.svg
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="60"
|
||||||
|
height="60"
|
||||||
|
id="svg3209"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.48.2 r9819"
|
||||||
|
sodipodi:docname="Inky.svg">
|
||||||
|
<title
|
||||||
|
id="title3238">Clyde</title>
|
||||||
|
<defs
|
||||||
|
id="defs3211" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1.4"
|
||||||
|
inkscape:cx="56.727193"
|
||||||
|
inkscape:cy="-67.066627"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="g3048"
|
||||||
|
showgrid="false"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1148"
|
||||||
|
inkscape:window-x="-8"
|
||||||
|
inkscape:window-y="-8"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata3214">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title>Clyde</dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Ebene 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-620.1475,-462.09155)">
|
||||||
|
<g
|
||||||
|
id="g3048"
|
||||||
|
inkscape:label="#blinky"
|
||||||
|
transform="translate(169.6996,-110.9135)"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<title
|
||||||
|
id="title3056">Blinky</title>
|
||||||
|
<path
|
||||||
|
inkscape:label="#Blinky"
|
||||||
|
style="fill:#ff9955"
|
||||||
|
d="m 453.98527,630.78254 c -1.20261,-1.71697 -1.55219,-4.9583 -1.53689,-14.25 0.0359,-21.77874 2.19013,-29.87068 9.77706,-36.72501 5.18333,-4.68283 10.07002,-6.27246 19.24739,-6.26115 6.37329,0.008 8.45651,0.47101 13.42172,2.98399 11.10162,5.61871 13.56334,12.02522 14.22783,37.02721 0.37412,14.07623 0.26991,15.17032 -1.60658,16.86853 -2.62623,2.3767 -5.53748,1.59732 -10.77301,-2.8841 -2.27268,-1.94533 -4.53179,-3.53696 -5.02024,-3.53696 -0.48844,0 -2.64574,1.8 -4.79398,4 -2.14824,2.2 -4.66557,4 -5.59406,4 -0.9285,0 -3.86642,-1.8 -6.52873,-4 -5.38287,-4.44815 -6.50891,-4.75708 -8.50477,-2.33328 -1.68026,2.04055 -8.87298,7.33328 -9.96577,7.33328 -0.4363,0 -1.49378,-1.00013 -2.34997,-2.22251 z m 28.75904,-24.89453 c 1.20134,-0.61437 2.89994,-2.01574 3.77466,-3.11415 1.57615,-1.97921 1.61346,-1.97404 4.16388,0.57638 3.54047,3.54047 7.20236,4.28434 11.35124,2.30588 3.99841,-1.90671 4.67607,-5.32912 1.1547,-5.83152 -2.47068,-0.35249 -3.68426,-3.59046 -1.58413,-4.22664 4.84428,-1.46744 4.92389,-1.53759 3.90525,-3.44092 -1.36593,-2.55226 -6.46932,-4.52241 -9.64805,-3.7246 -1.43304,0.35967 -3.73322,1.78163 -5.11151,3.15992 l -2.50598,2.50598 -2.32267,-2.5062 c -4.5492,-4.90867 -12.1154,-4.15202 -15.04029,1.5041 -1.77559,3.43363 -1.79018,5.67231 -0.0573,8.79874 2.44707,4.41505 7.67237,6.16541 11.92024,3.99303 z m -0.93574,-7.33507 c -0.7754,-2.02068 0.3778,-3.54789 2.67902,-3.54789 1.40371,0 1.94098,0.692 1.94098,2.5 0,1.84621 -0.53124,2.5 -2.03139,2.5 -1.11726,0 -2.28213,-0.65345 -2.58861,-1.45211 z"
|
||||||
|
id="Blinky"
|
||||||
|
inkscape:connector-curvature="0">
|
||||||
|
<title
|
||||||
|
id="title3046">Blinky</title>
|
||||||
|
</path>
|
||||||
|
<path
|
||||||
|
transform="matrix(1.12,0,0,1.0188679,-61.321661,-12.313696)"
|
||||||
|
d="m 507.85713,598.61218 c 0,5.22698 -3.99746,9.46429 -8.92857,9.46429 -4.93112,0 -8.92857,-4.23731 -8.92857,-9.46429 0,-5.22698 3.99745,-9.46428 8.92857,-9.46428 4.93111,0 8.92857,4.2373 8.92857,9.46428 z"
|
||||||
|
sodipodi:ry="9.4642859"
|
||||||
|
sodipodi:rx="8.9285717"
|
||||||
|
sodipodi:cy="598.61218"
|
||||||
|
sodipodi:cx="498.92856"
|
||||||
|
id="path3004"
|
||||||
|
style="fill:#ffffff;fill-opacity:1"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
transform="matrix(1.12,0,0,1.0188679,-79.535934,-12.544555)"
|
||||||
|
d="m 507.85713,598.61218 c 0,5.22698 -3.99746,9.46429 -8.92857,9.46429 -4.93112,0 -8.92857,-4.23731 -8.92857,-9.46429 0,-5.22698 3.99745,-9.46428 8.92857,-9.46428 4.93111,0 8.92857,4.2373 8.92857,9.46428 z"
|
||||||
|
sodipodi:ry="9.4642859"
|
||||||
|
sodipodi:rx="8.9285717"
|
||||||
|
sodipodi:cy="598.61218"
|
||||||
|
sodipodi:cx="498.92856"
|
||||||
|
id="path3004-1"
|
||||||
|
style="fill:#ffffff;fill-opacity:1"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
transform="matrix(1.7599103,0,0,1.6850204,-365.34427,-410.69975)"
|
||||||
|
d="m 485.12575,598.23547 c 0,1.63881 -1.27198,2.96733 -2.84105,2.96733 -1.56907,0 -2.84106,-1.32852 -2.84106,-2.96733 0,-1.6388 1.27199,-2.96732 2.84106,-2.96732 1.56907,0 2.84105,1.32852 2.84105,2.96732 z"
|
||||||
|
sodipodi:ry="2.9673231"
|
||||||
|
sodipodi:rx="2.841054"
|
||||||
|
sodipodi:cy="598.23547"
|
||||||
|
sodipodi:cx="482.2847"
|
||||||
|
id="path3026"
|
||||||
|
style="fill:#0000ff;fill-opacity:1"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
transform="matrix(1.7599103,0,0,1.6850204,-346.35319,-411.00305)"
|
||||||
|
d="m 485.12575,598.23547 c 0,1.63881 -1.27198,2.96733 -2.84105,2.96733 -1.56907,0 -2.84106,-1.32852 -2.84106,-2.96733 0,-1.6388 1.27199,-2.96732 2.84106,-2.96732 1.56907,0 2.84105,1.32852 2.84105,2.96732 z"
|
||||||
|
sodipodi:ry="2.9673231"
|
||||||
|
sodipodi:rx="2.841054"
|
||||||
|
sodipodi:cy="598.23547"
|
||||||
|
sodipodi:cx="482.2847"
|
||||||
|
id="path3026-7"
|
||||||
|
style="fill:#0000ff;fill-opacity:1"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.7 KiB |
10464
html/img/dazzled.svg
Executable file
After Width: | Height: | Size: 794 KiB |
12
html/img/dazzled123.svg
Executable file
After Width: | Height: | Size: 1.5 MiB |
10464
html/img/dazzled2.svg
Executable file
After Width: | Height: | Size: 794 KiB |
117
html/img/dazzled2_original_not_used.svg
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="60"
|
||||||
|
height="60"
|
||||||
|
id="svg3209"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.48.2 r9819"
|
||||||
|
sodipodi:docname="dazzled2.svg">
|
||||||
|
<title
|
||||||
|
id="title3238">blinky</title>
|
||||||
|
<defs
|
||||||
|
id="defs3211" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="2.990248"
|
||||||
|
inkscape:cx="56.727193"
|
||||||
|
inkscape:cy="-15.981831"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
inkscape:window-width="1600"
|
||||||
|
inkscape:window-height="838"
|
||||||
|
inkscape:window-x="-8"
|
||||||
|
inkscape:window-y="-8"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata3214">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title>blinky</dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Ebene 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-620.1475,-462.09155)">
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="Blinky"
|
||||||
|
d="m 623.68487,519.86904 c -1.20261,-1.71697 -1.55219,-4.9583 -1.53689,-14.25 0.0359,-21.77874 2.19013,-29.87068 9.77706,-36.72501 5.18333,-4.68283 10.07002,-6.27246 19.24739,-6.26115 6.37329,0.008 8.45651,0.47101 13.42172,2.98399 11.10162,5.61871 13.56334,12.02522 14.22783,37.02721 0.37412,14.07623 0.26991,15.17032 -1.60658,16.86853 -2.62623,2.3767 -5.53748,1.59732 -10.77301,-2.8841 -2.27268,-1.94533 -4.53179,-3.53696 -5.02024,-3.53696 -0.48844,0 -2.64574,1.8 -4.79398,4 -2.14824,2.2 -4.66557,4 -5.59406,4 -0.9285,0 -3.86642,-1.8 -6.52873,-4 -5.38287,-4.44815 -6.50891,-4.75708 -8.50477,-2.33328 -1.68026,2.04055 -8.87298,7.33328 -9.96577,7.33328 -0.4363,0 -1.49378,-1.00013 -2.34997,-2.22251 z m 28.75904,-24.89453 c 1.20134,-0.61437 2.89994,-2.01574 3.77466,-3.11415 1.57615,-1.97921 1.61346,-1.97404 4.16388,0.57638 3.54047,3.54047 7.20236,4.28434 11.35124,2.30588 3.99841,-1.90671 4.67607,-5.32912 1.1547,-5.83152 -2.47068,-0.35249 -3.68426,-3.59046 -1.58413,-4.22664 4.84428,-1.46744 4.92389,-1.53759 3.90525,-3.44092 -1.36593,-2.55226 -6.46932,-4.52241 -9.64805,-3.7246 -1.43304,0.35967 -3.73322,1.78163 -5.11151,3.15992 l -2.50598,2.50598 -2.32267,-2.5062 c -4.5492,-4.90867 -12.1154,-4.15202 -15.04029,1.5041 -1.77559,3.43363 -1.79018,5.67231 -0.0573,8.79874 2.44707,4.41505 7.67237,6.16541 11.92024,3.99303 z m -0.93574,-7.33507 c -0.7754,-2.02068 0.3778,-3.54789 2.67902,-3.54789 1.40371,0 1.94098,0.692 1.94098,2.5 0,1.84621 -0.53124,2.5 -2.03139,2.5 -1.11726,0 -2.28213,-0.65345 -2.58861,-1.45211 z"
|
||||||
|
style="fill:#ffffff"
|
||||||
|
inkscape:label="#Blinky">
|
||||||
|
<title
|
||||||
|
id="title3046">Blinky</title>
|
||||||
|
</path>
|
||||||
|
<path
|
||||||
|
sodipodi:type="arc"
|
||||||
|
style="fill:#ff0000;fill-opacity:1"
|
||||||
|
id="path3004"
|
||||||
|
sodipodi:cx="498.92856"
|
||||||
|
sodipodi:cy="598.61218"
|
||||||
|
sodipodi:rx="8.9285717"
|
||||||
|
sodipodi:ry="9.4642859"
|
||||||
|
d="m 507.85713,598.61218 a 8.9285717,9.4642859 0 1 1 -17.85714,0 8.9285717,9.4642859 0 1 1 17.85714,0 z"
|
||||||
|
transform="matrix(1.12,0,0,1.0188679,108.37794,-123.2272)" />
|
||||||
|
<path
|
||||||
|
sodipodi:type="arc"
|
||||||
|
style="fill:#ff0000;fill-opacity:1"
|
||||||
|
id="path3004-1"
|
||||||
|
sodipodi:cx="498.92856"
|
||||||
|
sodipodi:cy="598.61218"
|
||||||
|
sodipodi:rx="8.9285717"
|
||||||
|
sodipodi:ry="9.4642859"
|
||||||
|
d="m 507.85713,598.61218 a 8.9285717,9.4642859 0 1 1 -17.85714,0 8.9285717,9.4642859 0 1 1 17.85714,0 z"
|
||||||
|
transform="matrix(1.12,0,0,1.0188679,90.163666,-123.45806)" />
|
||||||
|
<path
|
||||||
|
sodipodi:type="spiral"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
id="path3023"
|
||||||
|
sodipodi:cx="-171.42857"
|
||||||
|
sodipodi:cy="90.714287"
|
||||||
|
sodipodi:expansion="1"
|
||||||
|
sodipodi:revolution="3"
|
||||||
|
sodipodi:radius="10.738069"
|
||||||
|
sodipodi:argument="-18.782988"
|
||||||
|
sodipodi:t0="0"
|
||||||
|
d="m -171.42857,90.714287 c 0.53719,0.03581 0.21676,0.7418 -0.0595,0.892857 -0.74871,0.409355 -1.55211,-0.305461 -1.72619,-1.011905 -0.31138,-1.263664 0.76768,-2.387799 1.96429,-2.559524 1.75607,-0.252013 3.23875,1.232729 3.39285,2.916668 0.20541,2.244424 -1.69833,4.095629 -3.86904,4.226189 -2.73162,0.164298 -4.95547,-2.1641 -5.05953,-4.821429 -0.12603,-3.218381 2.62993,-5.816986 5.77381,-5.892856 3.70496,-0.08941 6.67957,3.095795 6.72619,6.726191 0.0538,4.191437 -3.56168,7.542851 -7.67857,7.559523 -4.67787,0.01894 -8.40663,-4.027596 -8.39285,-8.630954 0.0154,-5.164272 4.49351,-9.270768 9.58333,-9.226188 5.65066,0.04949 10.13518,4.959454 10.05952,10.535715"
|
||||||
|
transform="matrix(0.84223033,0,0,0.88263013,792.90942,407.51373)" />
|
||||||
|
<path
|
||||||
|
sodipodi:type="spiral"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
id="path3023-1"
|
||||||
|
sodipodi:cx="-171.42857"
|
||||||
|
sodipodi:cy="90.714287"
|
||||||
|
sodipodi:expansion="1"
|
||||||
|
sodipodi:revolution="3"
|
||||||
|
sodipodi:radius="10.738069"
|
||||||
|
sodipodi:argument="-18.782988"
|
||||||
|
sodipodi:t0="0"
|
||||||
|
d="m -171.42857,90.714287 c 0.53719,0.03581 0.21676,0.7418 -0.0595,0.892857 -0.74871,0.409355 -1.55211,-0.305461 -1.72619,-1.011905 -0.31138,-1.263664 0.76768,-2.387799 1.96429,-2.559524 1.75607,-0.252013 3.23875,1.232729 3.39285,2.916668 0.20541,2.244424 -1.69833,4.095629 -3.86904,4.226189 -2.73162,0.164298 -4.95547,-2.1641 -5.05953,-4.821429 -0.12603,-3.218381 2.62993,-5.816986 5.77381,-5.892856 3.70496,-0.08941 6.67957,3.095795 6.72619,6.726191 0.0538,4.191437 -3.56168,7.542851 -7.67857,7.559523 -4.67787,0.01894 -8.40663,-4.027596 -8.39285,-8.630954 0.0154,-5.164272 4.49351,-9.270768 9.58333,-9.226188 5.65066,0.04949 10.13518,4.959454 10.05952,10.535715"
|
||||||
|
transform="matrix(0.84223033,0,0,0.88263013,810.93075,407.36401)" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 6.4 KiB |
117
html/img/dazzled_original_not_used.svg
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="60"
|
||||||
|
height="60"
|
||||||
|
id="svg3209"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.48.2 r9819"
|
||||||
|
sodipodi:docname="blinky.svg">
|
||||||
|
<title
|
||||||
|
id="title3238">blinky</title>
|
||||||
|
<defs
|
||||||
|
id="defs3211" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="2.990248"
|
||||||
|
inkscape:cx="56.727193"
|
||||||
|
inkscape:cy="-15.981831"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
inkscape:window-width="1600"
|
||||||
|
inkscape:window-height="838"
|
||||||
|
inkscape:window-x="-8"
|
||||||
|
inkscape:window-y="-8"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata3214">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title>blinky</dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Ebene 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-620.1475,-462.09155)">
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="Blinky"
|
||||||
|
d="m 623.68487,519.86904 c -1.20261,-1.71697 -1.55219,-4.9583 -1.53689,-14.25 0.0359,-21.77874 2.19013,-29.87068 9.77706,-36.72501 5.18333,-4.68283 10.07002,-6.27246 19.24739,-6.26115 6.37329,0.008 8.45651,0.47101 13.42172,2.98399 11.10162,5.61871 13.56334,12.02522 14.22783,37.02721 0.37412,14.07623 0.26991,15.17032 -1.60658,16.86853 -2.62623,2.3767 -5.53748,1.59732 -10.77301,-2.8841 -2.27268,-1.94533 -4.53179,-3.53696 -5.02024,-3.53696 -0.48844,0 -2.64574,1.8 -4.79398,4 -2.14824,2.2 -4.66557,4 -5.59406,4 -0.9285,0 -3.86642,-1.8 -6.52873,-4 -5.38287,-4.44815 -6.50891,-4.75708 -8.50477,-2.33328 -1.68026,2.04055 -8.87298,7.33328 -9.96577,7.33328 -0.4363,0 -1.49378,-1.00013 -2.34997,-2.22251 z m 28.75904,-24.89453 c 1.20134,-0.61437 2.89994,-2.01574 3.77466,-3.11415 1.57615,-1.97921 1.61346,-1.97404 4.16388,0.57638 3.54047,3.54047 7.20236,4.28434 11.35124,2.30588 3.99841,-1.90671 4.67607,-5.32912 1.1547,-5.83152 -2.47068,-0.35249 -3.68426,-3.59046 -1.58413,-4.22664 4.84428,-1.46744 4.92389,-1.53759 3.90525,-3.44092 -1.36593,-2.55226 -6.46932,-4.52241 -9.64805,-3.7246 -1.43304,0.35967 -3.73322,1.78163 -5.11151,3.15992 l -2.50598,2.50598 -2.32267,-2.5062 c -4.5492,-4.90867 -12.1154,-4.15202 -15.04029,1.5041 -1.77559,3.43363 -1.79018,5.67231 -0.0573,8.79874 2.44707,4.41505 7.67237,6.16541 11.92024,3.99303 z m -0.93574,-7.33507 c -0.7754,-2.02068 0.3778,-3.54789 2.67902,-3.54789 1.40371,0 1.94098,0.692 1.94098,2.5 0,1.84621 -0.53124,2.5 -2.03139,2.5 -1.11726,0 -2.28213,-0.65345 -2.58861,-1.45211 z"
|
||||||
|
style="fill:#0000ff"
|
||||||
|
inkscape:label="#Blinky">
|
||||||
|
<title
|
||||||
|
id="title3046">Blinky</title>
|
||||||
|
</path>
|
||||||
|
<path
|
||||||
|
sodipodi:type="arc"
|
||||||
|
style="fill:#ffffff;fill-opacity:1"
|
||||||
|
id="path3004"
|
||||||
|
sodipodi:cx="498.92856"
|
||||||
|
sodipodi:cy="598.61218"
|
||||||
|
sodipodi:rx="8.9285717"
|
||||||
|
sodipodi:ry="9.4642859"
|
||||||
|
d="m 507.85713,598.61218 a 8.9285717,9.4642859 0 1 1 -17.85714,0 8.9285717,9.4642859 0 1 1 17.85714,0 z"
|
||||||
|
transform="matrix(1.12,0,0,1.0188679,108.37794,-123.2272)" />
|
||||||
|
<path
|
||||||
|
sodipodi:type="arc"
|
||||||
|
style="fill:#ffffff;fill-opacity:1"
|
||||||
|
id="path3004-1"
|
||||||
|
sodipodi:cx="498.92856"
|
||||||
|
sodipodi:cy="598.61218"
|
||||||
|
sodipodi:rx="8.9285717"
|
||||||
|
sodipodi:ry="9.4642859"
|
||||||
|
d="m 507.85713,598.61218 a 8.9285717,9.4642859 0 1 1 -17.85714,0 8.9285717,9.4642859 0 1 1 17.85714,0 z"
|
||||||
|
transform="matrix(1.12,0,0,1.0188679,90.163666,-123.45806)" />
|
||||||
|
<path
|
||||||
|
sodipodi:type="spiral"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
id="path3023"
|
||||||
|
sodipodi:cx="-171.42857"
|
||||||
|
sodipodi:cy="90.714287"
|
||||||
|
sodipodi:expansion="1"
|
||||||
|
sodipodi:revolution="3"
|
||||||
|
sodipodi:radius="10.738069"
|
||||||
|
sodipodi:argument="-18.782988"
|
||||||
|
sodipodi:t0="0"
|
||||||
|
d="m -171.42857,90.714287 c 0.53719,0.03581 0.21676,0.7418 -0.0595,0.892857 -0.74871,0.409355 -1.55211,-0.305461 -1.72619,-1.011905 -0.31138,-1.263664 0.76768,-2.387799 1.96429,-2.559524 1.75607,-0.252013 3.23875,1.232729 3.39285,2.916668 0.20541,2.244424 -1.69833,4.095629 -3.86904,4.226189 -2.73162,0.164298 -4.95547,-2.1641 -5.05953,-4.821429 -0.12603,-3.218381 2.62993,-5.816986 5.77381,-5.892856 3.70496,-0.08941 6.67957,3.095795 6.72619,6.726191 0.0538,4.191437 -3.56168,7.542851 -7.67857,7.559523 -4.67787,0.01894 -8.40663,-4.027596 -8.39285,-8.630954 0.0154,-5.164272 4.49351,-9.270768 9.58333,-9.226188 5.65066,0.04949 10.13518,4.959454 10.05952,10.535715"
|
||||||
|
transform="matrix(0.84223033,0,0,0.88263013,792.90942,407.51373)" />
|
||||||
|
<path
|
||||||
|
sodipodi:type="spiral"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
id="path3023-1"
|
||||||
|
sodipodi:cx="-171.42857"
|
||||||
|
sodipodi:cy="90.714287"
|
||||||
|
sodipodi:expansion="1"
|
||||||
|
sodipodi:revolution="3"
|
||||||
|
sodipodi:radius="10.738069"
|
||||||
|
sodipodi:argument="-18.782988"
|
||||||
|
sodipodi:t0="0"
|
||||||
|
d="m -171.42857,90.714287 c 0.53719,0.03581 0.21676,0.7418 -0.0595,0.892857 -0.74871,0.409355 -1.55211,-0.305461 -1.72619,-1.011905 -0.31138,-1.263664 0.76768,-2.387799 1.96429,-2.559524 1.75607,-0.252013 3.23875,1.232729 3.39285,2.916668 0.20541,2.244424 -1.69833,4.095629 -3.86904,4.226189 -2.73162,0.164298 -4.95547,-2.1641 -5.05953,-4.821429 -0.12603,-3.218381 2.62993,-5.816986 5.77381,-5.892856 3.70496,-0.08941 6.67957,3.095795 6.72619,6.726191 0.0538,4.191437 -3.56168,7.542851 -7.67857,7.559523 -4.67787,0.01894 -8.40663,-4.027596 -8.39285,-8.630954 0.0154,-5.164272 4.49351,-9.270768 9.58333,-9.226188 5.65066,0.04949 10.13518,4.959454 10.05952,10.535715"
|
||||||
|
transform="matrix(0.84223033,0,0,0.88263013,810.93075,407.36401)" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 6.4 KiB |
102
html/img/dead.svg
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="60"
|
||||||
|
height="60"
|
||||||
|
id="svg3209"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.48.2 r9819"
|
||||||
|
sodipodi:docname="blinky.svg">
|
||||||
|
<title
|
||||||
|
id="title3238">dead</title>
|
||||||
|
<defs
|
||||||
|
id="defs3211" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1.4"
|
||||||
|
inkscape:cx="56.727193"
|
||||||
|
inkscape:cy="-67.066627"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
inkscape:window-width="1600"
|
||||||
|
inkscape:window-height="838"
|
||||||
|
inkscape:window-x="-8"
|
||||||
|
inkscape:window-y="-8"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata3214">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title>dead</dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Ebene 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-620.1475,-462.09155)">
|
||||||
|
<path
|
||||||
|
sodipodi:type="arc"
|
||||||
|
style="fill:#ffffff;fill-opacity:1"
|
||||||
|
id="path3004"
|
||||||
|
sodipodi:cx="498.92856"
|
||||||
|
sodipodi:cy="598.61218"
|
||||||
|
sodipodi:rx="8.9285717"
|
||||||
|
sodipodi:ry="9.4642859"
|
||||||
|
d="m 507.85713,598.61218 a 8.9285717,9.4642859 0 1 1 -17.85714,0 8.9285717,9.4642859 0 1 1 17.85714,0 z"
|
||||||
|
transform="matrix(1.12,0,0,1.0188679,108.37794,-123.2272)" />
|
||||||
|
<path
|
||||||
|
sodipodi:type="arc"
|
||||||
|
style="fill:#ffffff;fill-opacity:1"
|
||||||
|
id="path3004-1"
|
||||||
|
sodipodi:cx="498.92856"
|
||||||
|
sodipodi:cy="598.61218"
|
||||||
|
sodipodi:rx="8.9285717"
|
||||||
|
sodipodi:ry="9.4642859"
|
||||||
|
d="m 507.85713,598.61218 a 8.9285717,9.4642859 0 1 1 -17.85714,0 8.9285717,9.4642859 0 1 1 17.85714,0 z"
|
||||||
|
transform="matrix(1.12,0,0,1.0188679,90.163666,-123.45806)" />
|
||||||
|
<path
|
||||||
|
sodipodi:type="arc"
|
||||||
|
style="fill:#0000ff;fill-opacity:1"
|
||||||
|
id="path3026"
|
||||||
|
sodipodi:cx="482.2847"
|
||||||
|
sodipodi:cy="598.23547"
|
||||||
|
sodipodi:rx="2.841054"
|
||||||
|
sodipodi:ry="2.9673231"
|
||||||
|
d="m 485.12575,598.23547 a 2.841054,2.9673231 0 1 1 -5.68211,0 2.841054,2.9673231 0 1 1 5.68211,0 z"
|
||||||
|
transform="matrix(1.7599103,0,0,1.6850204,-195.64467,-521.61325)" />
|
||||||
|
<path
|
||||||
|
sodipodi:type="arc"
|
||||||
|
style="fill:#0000ff;fill-opacity:1"
|
||||||
|
id="path3026-7"
|
||||||
|
sodipodi:cx="482.2847"
|
||||||
|
sodipodi:cy="598.23547"
|
||||||
|
sodipodi:rx="2.841054"
|
||||||
|
sodipodi:ry="2.9673231"
|
||||||
|
d="m 485.12575,598.23547 a 2.841054,2.9673231 0 1 1 -5.68211,0 2.841054,2.9673231 0 1 1 5.68211,0 z"
|
||||||
|
transform="matrix(1.7599103,0,0,1.6850204,-176.65359,-521.91655)" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.3 KiB |
BIN
html/img/heart.png
Normal file
After Width: | Height: | Size: 181 B |
BIN
html/img/icon-128.png
Normal file
After Width: | Height: | Size: 4.4 KiB |
BIN
html/img/icon-128_old.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
50
html/img/inky.svg
Executable file
After Width: | Height: | Size: 16 KiB |
120
html/img/inky_original_not_used.svg
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="60"
|
||||||
|
height="60"
|
||||||
|
id="svg3209"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.48.2 r9819"
|
||||||
|
sodipodi:docname="pinky">
|
||||||
|
<title
|
||||||
|
id="title3238">Inky</title>
|
||||||
|
<defs
|
||||||
|
id="defs3211" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1.4"
|
||||||
|
inkscape:cx="56.727193"
|
||||||
|
inkscape:cy="-67.066627"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="g3048"
|
||||||
|
showgrid="false"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1148"
|
||||||
|
inkscape:window-x="-8"
|
||||||
|
inkscape:window-y="-8"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata3214">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title>Inky</dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Ebene 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-620.1475,-462.09155)">
|
||||||
|
<g
|
||||||
|
id="g3048"
|
||||||
|
inkscape:label="#blinky"
|
||||||
|
transform="translate(169.6996,-110.9135)"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<title
|
||||||
|
id="title3056">Blinky</title>
|
||||||
|
<path
|
||||||
|
inkscape:label="#Blinky"
|
||||||
|
style="fill:#80e5ff"
|
||||||
|
d="m 453.98527,630.78254 c -1.20261,-1.71697 -1.55219,-4.9583 -1.53689,-14.25 0.0359,-21.77874 2.19013,-29.87068 9.77706,-36.72501 5.18333,-4.68283 10.07002,-6.27246 19.24739,-6.26115 6.37329,0.008 8.45651,0.47101 13.42172,2.98399 11.10162,5.61871 13.56334,12.02522 14.22783,37.02721 0.37412,14.07623 0.26991,15.17032 -1.60658,16.86853 -2.62623,2.3767 -5.53748,1.59732 -10.77301,-2.8841 -2.27268,-1.94533 -4.53179,-3.53696 -5.02024,-3.53696 -0.48844,0 -2.64574,1.8 -4.79398,4 -2.14824,2.2 -4.66557,4 -5.59406,4 -0.9285,0 -3.86642,-1.8 -6.52873,-4 -5.38287,-4.44815 -6.50891,-4.75708 -8.50477,-2.33328 -1.68026,2.04055 -8.87298,7.33328 -9.96577,7.33328 -0.4363,0 -1.49378,-1.00013 -2.34997,-2.22251 z m 28.75904,-24.89453 c 1.20134,-0.61437 2.89994,-2.01574 3.77466,-3.11415 1.57615,-1.97921 1.61346,-1.97404 4.16388,0.57638 3.54047,3.54047 7.20236,4.28434 11.35124,2.30588 3.99841,-1.90671 4.67607,-5.32912 1.1547,-5.83152 -2.47068,-0.35249 -3.68426,-3.59046 -1.58413,-4.22664 4.84428,-1.46744 4.92389,-1.53759 3.90525,-3.44092 -1.36593,-2.55226 -6.46932,-4.52241 -9.64805,-3.7246 -1.43304,0.35967 -3.73322,1.78163 -5.11151,3.15992 l -2.50598,2.50598 -2.32267,-2.5062 c -4.5492,-4.90867 -12.1154,-4.15202 -15.04029,1.5041 -1.77559,3.43363 -1.79018,5.67231 -0.0573,8.79874 2.44707,4.41505 7.67237,6.16541 11.92024,3.99303 z m -0.93574,-7.33507 c -0.7754,-2.02068 0.3778,-3.54789 2.67902,-3.54789 1.40371,0 1.94098,0.692 1.94098,2.5 0,1.84621 -0.53124,2.5 -2.03139,2.5 -1.11726,0 -2.28213,-0.65345 -2.58861,-1.45211 z"
|
||||||
|
id="Blinky"
|
||||||
|
inkscape:connector-curvature="0">
|
||||||
|
<title
|
||||||
|
id="title3046">Blinky</title>
|
||||||
|
</path>
|
||||||
|
<path
|
||||||
|
transform="matrix(1.12,0,0,1.0188679,-61.321661,-12.313696)"
|
||||||
|
d="m 507.85713,598.61218 c 0,5.22698 -3.99746,9.46429 -8.92857,9.46429 -4.93112,0 -8.92857,-4.23731 -8.92857,-9.46429 0,-5.22698 3.99745,-9.46428 8.92857,-9.46428 4.93111,0 8.92857,4.2373 8.92857,9.46428 z"
|
||||||
|
sodipodi:ry="9.4642859"
|
||||||
|
sodipodi:rx="8.9285717"
|
||||||
|
sodipodi:cy="598.61218"
|
||||||
|
sodipodi:cx="498.92856"
|
||||||
|
id="path3004"
|
||||||
|
style="fill:#ffffff;fill-opacity:1"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
transform="matrix(1.12,0,0,1.0188679,-79.535934,-12.544555)"
|
||||||
|
d="m 507.85713,598.61218 c 0,5.22698 -3.99746,9.46429 -8.92857,9.46429 -4.93112,0 -8.92857,-4.23731 -8.92857,-9.46429 0,-5.22698 3.99745,-9.46428 8.92857,-9.46428 4.93111,0 8.92857,4.2373 8.92857,9.46428 z"
|
||||||
|
sodipodi:ry="9.4642859"
|
||||||
|
sodipodi:rx="8.9285717"
|
||||||
|
sodipodi:cy="598.61218"
|
||||||
|
sodipodi:cx="498.92856"
|
||||||
|
id="path3004-1"
|
||||||
|
style="fill:#ffffff;fill-opacity:1"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
transform="matrix(1.7599103,0,0,1.6850204,-365.34427,-410.69975)"
|
||||||
|
d="m 485.12575,598.23547 c 0,1.63881 -1.27198,2.96733 -2.84105,2.96733 -1.56907,0 -2.84106,-1.32852 -2.84106,-2.96733 0,-1.6388 1.27199,-2.96732 2.84106,-2.96732 1.56907,0 2.84105,1.32852 2.84105,2.96732 z"
|
||||||
|
sodipodi:ry="2.9673231"
|
||||||
|
sodipodi:rx="2.841054"
|
||||||
|
sodipodi:cy="598.23547"
|
||||||
|
sodipodi:cx="482.2847"
|
||||||
|
id="path3026"
|
||||||
|
style="fill:#0000ff;fill-opacity:1"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
transform="matrix(1.7599103,0,0,1.6850204,-346.35319,-411.00305)"
|
||||||
|
d="m 485.12575,598.23547 c 0,1.63881 -1.27198,2.96733 -2.84105,2.96733 -1.56907,0 -2.84106,-1.32852 -2.84106,-2.96733 0,-1.6388 1.27199,-2.96732 2.84106,-2.96732 1.56907,0 2.84105,1.32852 2.84105,2.96732 z"
|
||||||
|
sodipodi:ry="2.9673231"
|
||||||
|
sodipodi:rx="2.841054"
|
||||||
|
sodipodi:cy="598.23547"
|
||||||
|
sodipodi:cx="482.2847"
|
||||||
|
id="path3026-7"
|
||||||
|
style="fill:#0000ff;fill-opacity:1"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.7 KiB |
BIN
html/img/instructions/instructions_chase.PNG
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
html/img/instructions/instructions_powerpill.PNG
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
html/img/instructions/instructions_scatter.PNG
Normal file
After Width: | Height: | Size: 15 KiB |
8
html/img/pinky.svg
Executable file
After Width: | Height: | Size: 15 KiB |
120
html/img/pinky_original_not_used.svg
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="60"
|
||||||
|
height="60"
|
||||||
|
id="svg3209"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.48.2 r9819"
|
||||||
|
sodipodi:docname="blinky.svg">
|
||||||
|
<title
|
||||||
|
id="title3238">pinky</title>
|
||||||
|
<defs
|
||||||
|
id="defs3211" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1.4"
|
||||||
|
inkscape:cx="56.727193"
|
||||||
|
inkscape:cy="-67.066627"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="g3048"
|
||||||
|
showgrid="false"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1148"
|
||||||
|
inkscape:window-x="-8"
|
||||||
|
inkscape:window-y="-8"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata3214">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title>pinky</dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Ebene 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-620.1475,-462.09155)">
|
||||||
|
<g
|
||||||
|
id="g3048"
|
||||||
|
inkscape:label="#blinky"
|
||||||
|
transform="translate(169.6996,-110.9135)"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<title
|
||||||
|
id="title3056">Blinky</title>
|
||||||
|
<path
|
||||||
|
inkscape:label="#Blinky"
|
||||||
|
style="fill:#ff00ff"
|
||||||
|
d="m 453.98527,630.78254 c -1.20261,-1.71697 -1.55219,-4.9583 -1.53689,-14.25 0.0359,-21.77874 2.19013,-29.87068 9.77706,-36.72501 5.18333,-4.68283 10.07002,-6.27246 19.24739,-6.26115 6.37329,0.008 8.45651,0.47101 13.42172,2.98399 11.10162,5.61871 13.56334,12.02522 14.22783,37.02721 0.37412,14.07623 0.26991,15.17032 -1.60658,16.86853 -2.62623,2.3767 -5.53748,1.59732 -10.77301,-2.8841 -2.27268,-1.94533 -4.53179,-3.53696 -5.02024,-3.53696 -0.48844,0 -2.64574,1.8 -4.79398,4 -2.14824,2.2 -4.66557,4 -5.59406,4 -0.9285,0 -3.86642,-1.8 -6.52873,-4 -5.38287,-4.44815 -6.50891,-4.75708 -8.50477,-2.33328 -1.68026,2.04055 -8.87298,7.33328 -9.96577,7.33328 -0.4363,0 -1.49378,-1.00013 -2.34997,-2.22251 z m 28.75904,-24.89453 c 1.20134,-0.61437 2.89994,-2.01574 3.77466,-3.11415 1.57615,-1.97921 1.61346,-1.97404 4.16388,0.57638 3.54047,3.54047 7.20236,4.28434 11.35124,2.30588 3.99841,-1.90671 4.67607,-5.32912 1.1547,-5.83152 -2.47068,-0.35249 -3.68426,-3.59046 -1.58413,-4.22664 4.84428,-1.46744 4.92389,-1.53759 3.90525,-3.44092 -1.36593,-2.55226 -6.46932,-4.52241 -9.64805,-3.7246 -1.43304,0.35967 -3.73322,1.78163 -5.11151,3.15992 l -2.50598,2.50598 -2.32267,-2.5062 c -4.5492,-4.90867 -12.1154,-4.15202 -15.04029,1.5041 -1.77559,3.43363 -1.79018,5.67231 -0.0573,8.79874 2.44707,4.41505 7.67237,6.16541 11.92024,3.99303 z m -0.93574,-7.33507 c -0.7754,-2.02068 0.3778,-3.54789 2.67902,-3.54789 1.40371,0 1.94098,0.692 1.94098,2.5 0,1.84621 -0.53124,2.5 -2.03139,2.5 -1.11726,0 -2.28213,-0.65345 -2.58861,-1.45211 z"
|
||||||
|
id="Blinky"
|
||||||
|
inkscape:connector-curvature="0">
|
||||||
|
<title
|
||||||
|
id="title3046">Blinky</title>
|
||||||
|
</path>
|
||||||
|
<path
|
||||||
|
transform="matrix(1.12,0,0,1.0188679,-61.321661,-12.313696)"
|
||||||
|
d="m 507.85713,598.61218 c 0,5.22698 -3.99746,9.46429 -8.92857,9.46429 -4.93112,0 -8.92857,-4.23731 -8.92857,-9.46429 0,-5.22698 3.99745,-9.46428 8.92857,-9.46428 4.93111,0 8.92857,4.2373 8.92857,9.46428 z"
|
||||||
|
sodipodi:ry="9.4642859"
|
||||||
|
sodipodi:rx="8.9285717"
|
||||||
|
sodipodi:cy="598.61218"
|
||||||
|
sodipodi:cx="498.92856"
|
||||||
|
id="path3004"
|
||||||
|
style="fill:#ffffff;fill-opacity:1"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
transform="matrix(1.12,0,0,1.0188679,-79.535934,-12.544555)"
|
||||||
|
d="m 507.85713,598.61218 c 0,5.22698 -3.99746,9.46429 -8.92857,9.46429 -4.93112,0 -8.92857,-4.23731 -8.92857,-9.46429 0,-5.22698 3.99745,-9.46428 8.92857,-9.46428 4.93111,0 8.92857,4.2373 8.92857,9.46428 z"
|
||||||
|
sodipodi:ry="9.4642859"
|
||||||
|
sodipodi:rx="8.9285717"
|
||||||
|
sodipodi:cy="598.61218"
|
||||||
|
sodipodi:cx="498.92856"
|
||||||
|
id="path3004-1"
|
||||||
|
style="fill:#ffffff;fill-opacity:1"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
transform="matrix(1.7599103,0,0,1.6850204,-365.34427,-410.69975)"
|
||||||
|
d="m 485.12575,598.23547 c 0,1.63881 -1.27198,2.96733 -2.84105,2.96733 -1.56907,0 -2.84106,-1.32852 -2.84106,-2.96733 0,-1.6388 1.27199,-2.96732 2.84106,-2.96732 1.56907,0 2.84105,1.32852 2.84105,2.96732 z"
|
||||||
|
sodipodi:ry="2.9673231"
|
||||||
|
sodipodi:rx="2.841054"
|
||||||
|
sodipodi:cy="598.23547"
|
||||||
|
sodipodi:cx="482.2847"
|
||||||
|
id="path3026"
|
||||||
|
style="fill:#0000ff;fill-opacity:1"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
<path
|
||||||
|
transform="matrix(1.7599103,0,0,1.6850204,-346.35319,-411.00305)"
|
||||||
|
d="m 485.12575,598.23547 c 0,1.63881 -1.27198,2.96733 -2.84105,2.96733 -1.56907,0 -2.84106,-1.32852 -2.84106,-2.96733 0,-1.6388 1.27199,-2.96732 2.84106,-2.96732 1.56907,0 2.84105,1.32852 2.84105,2.96732 z"
|
||||||
|
sodipodi:ry="2.9673231"
|
||||||
|
sodipodi:rx="2.841054"
|
||||||
|
sodipodi:cy="598.23547"
|
||||||
|
sodipodi:cx="482.2847"
|
||||||
|
id="path3026-7"
|
||||||
|
style="fill:#0000ff;fill-opacity:1"
|
||||||
|
sodipodi:type="arc" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.7 KiB |
BIN
html/img/platzh1rsch-logo.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
html/img/t-shirt.png
Executable file
After Width: | Height: | Size: 123 KiB |
258
html/index.html
Normal file
@ -0,0 +1,258 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<!--<html lang="en">-->
|
||||||
|
<html lang="en" manifest="cache.manifest">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<title>Pacman in HTML 5 Canvas</title>
|
||||||
|
<link rel="stylesheet" href="style.css">
|
||||||
|
<link rel="stylesheet" href="pacman-canvas.css">
|
||||||
|
<link rel="manifest" href="manifest.json">
|
||||||
|
|
||||||
|
|
||||||
|
<!-- SEO Stuff -->
|
||||||
|
<meta name="description" content="Play Pacman Canvas for free on your desktop or mobile. This whole game is open source an was created in HTML5." />
|
||||||
|
<link rel="canonical" href="http://pacman.platzh1rsch.ch/" />
|
||||||
|
<meta name="author" content="platzh1rsch.ch" />
|
||||||
|
<meta name="publisher" content="platzh1rsch.ch" />
|
||||||
|
<meta name="copyright" content="© Copyright (c) platzh1rsch.ch" />
|
||||||
|
<meta name="robots" content="index,follow" />
|
||||||
|
<meta http-equiv="content-language" content="de">
|
||||||
|
<meta name="language" content="de">
|
||||||
|
<meta name="page-topic" content="Games/Arcade" />
|
||||||
|
|
||||||
|
<meta content="National" name="distribution" />
|
||||||
|
<meta content="pacman.platzh1rsch.ch" name="target" />
|
||||||
|
|
||||||
|
<!-- Facebook Open Graph Information -->
|
||||||
|
<meta property="og:image" content="http://pacman.platzh1rsch.ch/img/Icon-200x200.png"/>
|
||||||
|
<meta property="og:title" content="Pacman Canvas in HTML5" />
|
||||||
|
<meta property="og:description" content="Play Pacman Canvas for free on your desktop or mobile. This whole game is open source an was created in HTML5." />
|
||||||
|
<meta property="og:url" content="http://pacman.platzh1rsch.ch/" />
|
||||||
|
<meta property="og:site_name" content="Pacman Canvas in HTML5" />
|
||||||
|
<meta property="og:locale" content="en_US" />
|
||||||
|
|
||||||
|
<!-- site icons -->
|
||||||
|
<link rel="shortcut icon" href="img/Icon-130x130.png" />
|
||||||
|
<link rel="apple-touch-icon" href="img/Icon-130x130.png" />
|
||||||
|
|
||||||
|
<meta property="og:image" content="http://pacman.platzh1rsch.ch/img/Icon-130x130.png"/>
|
||||||
|
|
||||||
|
<!-- AppsFuel verification code -->
|
||||||
|
<meta name="appsfuel_code" content="83d3cedc1050a5c"/>
|
||||||
|
|
||||||
|
<!-- Mobile Viewport -->
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/>
|
||||||
|
|
||||||
|
<!-- Apple Mobile Web Capability -->
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||||
|
|
||||||
|
<!-- Script -->
|
||||||
|
<script src="js/jquery-1.10.2.min.js" type="text/javascript"></script>
|
||||||
|
<script src="js/jquery.hammer.min.js" type="text/javascript"></script>
|
||||||
|
|
||||||
|
<!-- Google Analytics -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
var _gaq = _gaq || [];
|
||||||
|
_gaq.push(['_setAccount', 'UA-28993174-1']);
|
||||||
|
_gaq.push(['_setDomainName', 'pacman.platzh1rsch.ch']);
|
||||||
|
_gaq.push(['_trackPageview']);
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||||
|
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||||
|
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||||
|
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<div class="main">
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Display this message if Javascript is disabled -->
|
||||||
|
<noscript>
|
||||||
|
<h2>Enable Javascript!</h2>
|
||||||
|
<p>This HTML 5 app requires Javascript to run. Please check that Javascript is enabled in your browser.</p>
|
||||||
|
</noscript>
|
||||||
|
|
||||||
|
<!-- Highscore -->
|
||||||
|
<div class="content" id="highscore-content">
|
||||||
|
<div class="button" id="back">< back</div>
|
||||||
|
<div>
|
||||||
|
<h1>Highscore</h1>
|
||||||
|
<p>
|
||||||
|
<ol id="highscore-list">
|
||||||
|
|
||||||
|
</ol>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- INSTRUCTIONS -->
|
||||||
|
<div class="content" id="instructions-content">
|
||||||
|
<div class="button" id="back">< back</div>
|
||||||
|
<div>
|
||||||
|
<h1>Instructions</h1>
|
||||||
|
<div class="nomobile">
|
||||||
|
<h2>Controls</h2>
|
||||||
|
<p>Use your arrow keys or [W,A,S,D] keys to navigate pacman.</p>
|
||||||
|
<p>To pause / resume the game press [SPACE] or [ESC] or just click into the game area.</p>
|
||||||
|
</div>
|
||||||
|
<div class="mobile">
|
||||||
|
<h2>Controls</h2>
|
||||||
|
<p>Use swipe gestures to navigate pacman.</p>
|
||||||
|
<p>Alternatively use the Arrow Buttons underneath the game area to navigate pacman.</p>
|
||||||
|
<p>To pause / resume the game, touch the game area once.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h2>Ghosts</h2>
|
||||||
|
<p>Ghosts are creatures that hunt pacman and will kill him if they catch him.</p>
|
||||||
|
<p>Every ghost has its own strategy to chase down pacman.</p>
|
||||||
|
<h3>Inky<img src="img/inky.svg" class="pull-right"></h3>
|
||||||
|
Inky will stay in the ghost house until pacman has eaten at least 30 pills. His home is the bottom right corner.
|
||||||
|
<h3>Blinky <img src="img/blinky.svg" class="pull-right"></h3>
|
||||||
|
Blinky is the most agressive of the 4 ghosts. He will start chasing pacman right away, and aim directly at him. His home is the upper right corner.
|
||||||
|
<h3>Pinky<img src="img/pinky.svg" class="pull-right"></h3>
|
||||||
|
Pinky will start chasing pacman right away, he will always aim 4 fields ahead and 4 fields left of pacman. His home is the upper left corner.
|
||||||
|
<h3>Clyde<img src="img/clyde.svg" class="pull-right"></h3>
|
||||||
|
Inky will stay in the ghost house until pacman has eaten at least 2/3 of all pills. His home is the bottom left corner.
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h2>Ghost moods</h2>
|
||||||
|
The ghosts have two different moods that change the way they act during the game.
|
||||||
|
<h3>Scatter mood</h3>
|
||||||
|
<p>This is the default mood. When ghosts are in scatter mood, they will just go to their home corner and stay there.</p>
|
||||||
|
<img src="img/instructions/instructions_scatter.PNG">
|
||||||
|
<h3>Chase mood</h3>
|
||||||
|
<p>After a certain time the ghosts change their mood and want to go chasing pacman. This is indicated through the walls turning red.</p>
|
||||||
|
<img src="img/instructions/instructions_chase.PNG">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h2>Items</h2>
|
||||||
|
<h3>Pills</h3>
|
||||||
|
<p>The goal of every level is, to eat all the white pills without getting catched by the ghosts. One pill results in 10 points.</p>
|
||||||
|
<h3>Powerpills</h3>
|
||||||
|
<p>In every level there are 4 powerpills, which are a bit bigger than the regular ones. If Pacman eats those, he will get strong enough to eat the ghosts. You can see this indicated by the ghosts turning blue. One powerpill results in 50 points.</p>
|
||||||
|
<img src="img/instructions/instructions_powerpill.PNG">
|
||||||
|
<p>Eating a ghost results in 100 points. The soul of the ghost will return to the ghost house before starting to chase Pacman again.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- main game content -->
|
||||||
|
<div class="content" id="game-content">
|
||||||
|
|
||||||
|
<!-- Google AdSense -->
|
||||||
|
<div id="adsense">
|
||||||
|
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
|
||||||
|
<ins class="adsbygoogle"
|
||||||
|
style="display:inline-block;width:320px;height:50px"
|
||||||
|
data-ad-client="ca-pub-0176206735745791"
|
||||||
|
data-ad-slot="6492298622"></ins>
|
||||||
|
<script>
|
||||||
|
(adsbygoogle = window.adsbygoogle || []).push({});
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- main game content -->
|
||||||
|
<div class="game wrapper">
|
||||||
|
|
||||||
|
<div class="score">Score:</div>
|
||||||
|
<div class="level">Lvl:</div>
|
||||||
|
<div class="lives">Lives: </div>
|
||||||
|
|
||||||
|
<div class="controlSound">
|
||||||
|
<img src="img/audio-icon-mute.png" id="mute">
|
||||||
|
</div>
|
||||||
|
<!-- canvas is splitted into 18x13 fields -->
|
||||||
|
<div id="canvas-container">
|
||||||
|
<div id="canvas-overlay-container">
|
||||||
|
<div id="canvas-overlay-content">
|
||||||
|
<div id="title">Pacman Canvas</div>
|
||||||
|
<div><p id="text">Click to Play</p></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<canvas id="myCanvas" width="540" height="390">
|
||||||
|
<p>Canvas not supported</p>
|
||||||
|
</canvas>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="controls" id="game-buttons">
|
||||||
|
<!-- Will be moved to Instructions
|
||||||
|
<p class="nomobile">Use W-A-S-D keys to navigate Pac-Man</p>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- OLD Buttons -->
|
||||||
|
<div>
|
||||||
|
<span id="up" class="controlButton">↑</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<span id="left" class="controlButton">←</span>
|
||||||
|
<span id="down" class="controlButton">↓</span>
|
||||||
|
<span id="right" class="controlButton">→</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<!-- inGame Controls End -->
|
||||||
|
|
||||||
|
<!-- Game Menu -->
|
||||||
|
<div class="controls" id="menu-buttons">
|
||||||
|
<ul>
|
||||||
|
<li class="button" id="newGame">New Game</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<!-- Game Menu End -->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="description nomobile">
|
||||||
|
<p>This whole thing was written in HTML5, CSS3 and Javascript (using small bits of jquery). For the basics I was following the <a href="http://devhammer.net/blog/exploring-html5-canvas-part-1---introduction" target="_blank">"Exploring HTML5 Canvas"</a> Tutorials (Part 1 - 6) by Devhammer. Thanks for the great Tutorial!</a>
|
||||||
|
<p>For some other stuff, like how to write objectorientated javascript I was following the tutorials over at <a href="http://www.codecademy.com/" target="_blank">http://www.codecademy.com/</a>, which is a really great site to learn Javascript and also other languages.</a>
|
||||||
|
<p>If you understand German you can also read my blogpost about this site: <a href="http://blog.platzh1rsch.ch/2012/08/pacman-in-html5-canvas.html">"Pacman in HTML5 Canvas"</a>.</p>
|
||||||
|
|
||||||
|
<span id="audio">
|
||||||
|
<audio id="theme" preload="auto">
|
||||||
|
<source src="wav/theme.wav" type="audio/wav">
|
||||||
|
<source src="mp3/theme.mp3" type="audio/mpeg">
|
||||||
|
</audio>
|
||||||
|
<audio id="waka" preload="auto">
|
||||||
|
<source src="wav/waka.wav" type="audio/wav">
|
||||||
|
<source src="mp3/waka.mp3" type="audio/mpeg">
|
||||||
|
</audio>
|
||||||
|
<audio id="die" preload="auto">
|
||||||
|
<source src="wav/die.wav" type="audio/wav">
|
||||||
|
<source src="mp3/die.mp3" type="audio/mpeg">
|
||||||
|
</audio>
|
||||||
|
<audio id="powerpill" preload="auto">
|
||||||
|
<source src="wav/powerpill.wav" type="audio/wav">
|
||||||
|
<source src="mp3/powerpill.mp3" type="audio/mpeg">
|
||||||
|
</audio>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="pacman-canvas.js" type="text/javascript"></script>
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
6
html/js/jquery-1.10.2.min.js
vendored
Normal file
8
html/js/jquery.hammer.min.js
vendored
Normal file
0
html/js/pacman/ghost.js
Normal file
0
html/js/pacman/pacman.js
Normal file
419
html/js/virtualjoystick.js
Normal file
@ -0,0 +1,419 @@
|
|||||||
|
var VirtualJoystick = function(opts)
|
||||||
|
{
|
||||||
|
opts = opts || {};
|
||||||
|
this._container = opts.container || document.body;
|
||||||
|
this._strokeStyle = opts.strokeStyle || 'cyan';
|
||||||
|
this._stickEl = opts.stickElement || this._buildJoystickStick();
|
||||||
|
this._baseEl = opts.baseElement || this._buildJoystickBase();
|
||||||
|
this._mouseSupport = opts.mouseSupport !== undefined ? opts.mouseSupport : false;
|
||||||
|
this._stationaryBase = opts.stationaryBase || false;
|
||||||
|
this._baseX = this._stickX = opts.baseX || 0
|
||||||
|
this._baseY = this._stickY = opts.baseY || 0
|
||||||
|
this._limitStickTravel = opts.limitStickTravel || false
|
||||||
|
this._stickRadius = opts.stickRadius !== undefined ? opts.stickRadius : 100
|
||||||
|
this._useCssTransform = opts.useCssTransform !== undefined ? opts.useCssTransform : false
|
||||||
|
|
||||||
|
this._container.style.position = "relative"
|
||||||
|
|
||||||
|
this._container.appendChild(this._baseEl)
|
||||||
|
this._baseEl.style.position = "absolute"
|
||||||
|
this._baseEl.style.display = "none"
|
||||||
|
this._container.appendChild(this._stickEl)
|
||||||
|
this._stickEl.style.position = "absolute"
|
||||||
|
this._stickEl.style.display = "none"
|
||||||
|
|
||||||
|
this._pressed = false;
|
||||||
|
this._touchIdx = null;
|
||||||
|
|
||||||
|
if(this._stationaryBase === true){
|
||||||
|
this._baseEl.style.display = "";
|
||||||
|
this._baseEl.style.left = (this._baseX - this._baseEl.width /2)+"px";
|
||||||
|
this._baseEl.style.top = (this._baseY - this._baseEl.height/2)+"px";
|
||||||
|
}
|
||||||
|
|
||||||
|
this._transform = this._useCssTransform ? this._getTransformProperty() : false;
|
||||||
|
this._has3d = this._check3D();
|
||||||
|
|
||||||
|
var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
|
||||||
|
this._$onTouchStart = __bind(this._onTouchStart , this);
|
||||||
|
this._$onTouchEnd = __bind(this._onTouchEnd , this);
|
||||||
|
this._$onTouchMove = __bind(this._onTouchMove , this);
|
||||||
|
this._container.addEventListener( 'touchstart' , this._$onTouchStart , false );
|
||||||
|
this._container.addEventListener( 'touchend' , this._$onTouchEnd , false );
|
||||||
|
this._container.addEventListener( 'touchmove' , this._$onTouchMove , false );
|
||||||
|
if( this._mouseSupport ){
|
||||||
|
this._$onMouseDown = __bind(this._onMouseDown , this);
|
||||||
|
this._$onMouseUp = __bind(this._onMouseUp , this);
|
||||||
|
this._$onMouseMove = __bind(this._onMouseMove , this);
|
||||||
|
this._container.addEventListener( 'mousedown' , this._$onMouseDown , false );
|
||||||
|
this._container.addEventListener( 'mouseup' , this._$onMouseUp , false );
|
||||||
|
this._container.addEventListener( 'mousemove' , this._$onMouseMove , false );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
VirtualJoystick.prototype.destroy = function()
|
||||||
|
{
|
||||||
|
this._container.removeChild(this._baseEl);
|
||||||
|
this._container.removeChild(this._stickEl);
|
||||||
|
|
||||||
|
this._container.removeEventListener( 'touchstart' , this._$onTouchStart , false );
|
||||||
|
this._container.removeEventListener( 'touchend' , this._$onTouchEnd , false );
|
||||||
|
this._container.removeEventListener( 'touchmove' , this._$onTouchMove , false );
|
||||||
|
if( this._mouseSupport ){
|
||||||
|
this._container.removeEventListener( 'mouseup' , this._$onMouseUp , false );
|
||||||
|
this._container.removeEventListener( 'mousedown' , this._$onMouseDown , false );
|
||||||
|
this._container.removeEventListener( 'mousemove' , this._$onMouseMove , false );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @returns {Boolean} true if touchscreen is currently available, false otherwise
|
||||||
|
*/
|
||||||
|
VirtualJoystick.touchScreenAvailable = function()
|
||||||
|
{
|
||||||
|
return 'createTouch' in document ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* microevents.js - https://github.com/jeromeetienne/microevent.js
|
||||||
|
*/
|
||||||
|
;(function(destObj){
|
||||||
|
destObj.addEventListener = function(event, fct){
|
||||||
|
if(this._events === undefined) this._events = {};
|
||||||
|
this._events[event] = this._events[event] || [];
|
||||||
|
this._events[event].push(fct);
|
||||||
|
return fct;
|
||||||
|
};
|
||||||
|
destObj.removeEventListener = function(event, fct){
|
||||||
|
if(this._events === undefined) this._events = {};
|
||||||
|
if( event in this._events === false ) return;
|
||||||
|
this._events[event].splice(this._events[event].indexOf(fct), 1);
|
||||||
|
};
|
||||||
|
destObj.dispatchEvent = function(event /* , args... */){
|
||||||
|
if(this._events === undefined) this._events = {};
|
||||||
|
if( this._events[event] === undefined ) return;
|
||||||
|
var tmpArray = this._events[event].slice();
|
||||||
|
for(var i = 0; i < tmpArray.length; i++){
|
||||||
|
var result = tmpArray[i].apply(this, Array.prototype.slice.call(arguments, 1))
|
||||||
|
if( result !== undefined ) return result;
|
||||||
|
}
|
||||||
|
return undefined
|
||||||
|
};
|
||||||
|
})(VirtualJoystick.prototype);
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// //
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
VirtualJoystick.prototype.deltaX = function(){ return this._stickX - this._baseX; }
|
||||||
|
VirtualJoystick.prototype.deltaY = function(){ return this._stickY - this._baseY; }
|
||||||
|
|
||||||
|
VirtualJoystick.prototype.up = function(){
|
||||||
|
if( this._pressed === false ) return false;
|
||||||
|
var deltaX = this.deltaX();
|
||||||
|
var deltaY = this.deltaY();
|
||||||
|
if( deltaY >= 0 ) return false;
|
||||||
|
if( Math.abs(deltaX) > 2*Math.abs(deltaY) ) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
VirtualJoystick.prototype.down = function(){
|
||||||
|
if( this._pressed === false ) return false;
|
||||||
|
var deltaX = this.deltaX();
|
||||||
|
var deltaY = this.deltaY();
|
||||||
|
if( deltaY <= 0 ) return false;
|
||||||
|
if( Math.abs(deltaX) > 2*Math.abs(deltaY) ) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
VirtualJoystick.prototype.right = function(){
|
||||||
|
if( this._pressed === false ) return false;
|
||||||
|
var deltaX = this.deltaX();
|
||||||
|
var deltaY = this.deltaY();
|
||||||
|
if( deltaX <= 0 ) return false;
|
||||||
|
if( Math.abs(deltaY) > 2*Math.abs(deltaX) ) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
VirtualJoystick.prototype.left = function(){
|
||||||
|
if( this._pressed === false ) return false;
|
||||||
|
var deltaX = this.deltaX();
|
||||||
|
var deltaY = this.deltaY();
|
||||||
|
if( deltaX >= 0 ) return false;
|
||||||
|
if( Math.abs(deltaY) > 2*Math.abs(deltaX) ) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// //
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
VirtualJoystick.prototype._onUp = function()
|
||||||
|
{
|
||||||
|
this._pressed = false;
|
||||||
|
this._stickEl.style.display = "none";
|
||||||
|
|
||||||
|
if(this._stationaryBase == false){
|
||||||
|
this._baseEl.style.display = "none";
|
||||||
|
|
||||||
|
this._baseX = this._baseY = 0;
|
||||||
|
this._stickX = this._stickY = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
VirtualJoystick.prototype._onDown = function(x, y)
|
||||||
|
{
|
||||||
|
this._pressed = true;
|
||||||
|
if(this._stationaryBase == false){
|
||||||
|
this._baseX = x;
|
||||||
|
this._baseY = y;
|
||||||
|
this._baseEl.style.display = "";
|
||||||
|
this._move(this._baseEl.style, (this._baseX - this._baseEl.width /2), (this._baseY - this._baseEl.height/2));
|
||||||
|
}
|
||||||
|
|
||||||
|
this._stickX = x;
|
||||||
|
this._stickY = y;
|
||||||
|
|
||||||
|
if(this._limitStickTravel === true){
|
||||||
|
var deltaX = this.deltaX();
|
||||||
|
var deltaY = this.deltaY();
|
||||||
|
var stickDistance = Math.sqrt( (deltaX * deltaX) + (deltaY * deltaY) );
|
||||||
|
if(stickDistance > this._stickRadius){
|
||||||
|
var stickNormalizedX = deltaX / stickDistance;
|
||||||
|
var stickNormalizedY = deltaY / stickDistance;
|
||||||
|
|
||||||
|
this._stickX = stickNormalizedX * this._stickRadius + this._baseX;
|
||||||
|
this._stickY = stickNormalizedY * this._stickRadius + this._baseY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this._stickEl.style.display = "";
|
||||||
|
this._move(this._stickEl.style, (this._stickX - this._stickEl.width /2), (this._stickY - this._stickEl.height/2));
|
||||||
|
}
|
||||||
|
|
||||||
|
VirtualJoystick.prototype._onMove = function(x, y)
|
||||||
|
{
|
||||||
|
if( this._pressed === true ){
|
||||||
|
this._stickX = x;
|
||||||
|
this._stickY = y;
|
||||||
|
|
||||||
|
if(this._limitStickTravel === true){
|
||||||
|
var deltaX = this.deltaX();
|
||||||
|
var deltaY = this.deltaY();
|
||||||
|
var stickDistance = Math.sqrt( (deltaX * deltaX) + (deltaY * deltaY) );
|
||||||
|
if(stickDistance > this._stickRadius){
|
||||||
|
var stickNormalizedX = deltaX / stickDistance;
|
||||||
|
var stickNormalizedY = deltaY / stickDistance;
|
||||||
|
|
||||||
|
this._stickX = stickNormalizedX * this._stickRadius + this._baseX;
|
||||||
|
this._stickY = stickNormalizedY * this._stickRadius + this._baseY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this._move(this._stickEl.style, (this._stickX - this._stickEl.width /2), (this._stickY - this._stickEl.height/2));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// bind touch events (and mouse events for debug) //
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
VirtualJoystick.prototype._onMouseUp = function(event)
|
||||||
|
{
|
||||||
|
return this._onUp();
|
||||||
|
}
|
||||||
|
|
||||||
|
VirtualJoystick.prototype._onMouseDown = function(event)
|
||||||
|
{
|
||||||
|
event.preventDefault();
|
||||||
|
var x = event.clientX;
|
||||||
|
var y = event.clientY;
|
||||||
|
return this._onDown(x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
VirtualJoystick.prototype._onMouseMove = function(event)
|
||||||
|
{
|
||||||
|
var x = event.clientX;
|
||||||
|
var y = event.clientY;
|
||||||
|
return this._onMove(x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// comment //
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
VirtualJoystick.prototype._onTouchStart = function(event)
|
||||||
|
{
|
||||||
|
// if there is already a touch inprogress do nothing
|
||||||
|
if( this._touchIdx !== null ) return;
|
||||||
|
|
||||||
|
// notify event for validation
|
||||||
|
var isValid = this.dispatchEvent('touchStartValidation', event);
|
||||||
|
if( isValid === false ) return;
|
||||||
|
|
||||||
|
// dispatch touchStart
|
||||||
|
this.dispatchEvent('touchStart', event);
|
||||||
|
|
||||||
|
event.preventDefault();
|
||||||
|
// get the first who changed
|
||||||
|
var touch = event.changedTouches[0];
|
||||||
|
// set the touchIdx of this joystick
|
||||||
|
this._touchIdx = touch.identifier;
|
||||||
|
|
||||||
|
// forward the action
|
||||||
|
var x = touch.pageX;
|
||||||
|
var y = touch.pageY;
|
||||||
|
return this._onDown(x, y)
|
||||||
|
}
|
||||||
|
|
||||||
|
VirtualJoystick.prototype._onTouchEnd = function(event)
|
||||||
|
{
|
||||||
|
// if there is no touch in progress, do nothing
|
||||||
|
if( this._touchIdx === null ) return;
|
||||||
|
|
||||||
|
// dispatch touchEnd
|
||||||
|
this.dispatchEvent('touchEnd', event);
|
||||||
|
|
||||||
|
// try to find our touch event
|
||||||
|
var touchList = event.changedTouches;
|
||||||
|
for(var i = 0; i < touchList.length && touchList[i].identifier !== this._touchIdx; i++);
|
||||||
|
// if touch event isnt found,
|
||||||
|
if( i === touchList.length) return;
|
||||||
|
|
||||||
|
// reset touchIdx - mark it as no-touch-in-progress
|
||||||
|
this._touchIdx = null;
|
||||||
|
|
||||||
|
//??????
|
||||||
|
// no preventDefault to get click event on ios
|
||||||
|
event.preventDefault();
|
||||||
|
|
||||||
|
return this._onUp()
|
||||||
|
}
|
||||||
|
|
||||||
|
VirtualJoystick.prototype._onTouchMove = function(event)
|
||||||
|
{
|
||||||
|
// if there is no touch in progress, do nothing
|
||||||
|
if( this._touchIdx === null ) return;
|
||||||
|
|
||||||
|
// try to find our touch event
|
||||||
|
var touchList = event.changedTouches;
|
||||||
|
for(var i = 0; i < touchList.length && touchList[i].identifier !== this._touchIdx; i++ );
|
||||||
|
// if touch event with the proper identifier isnt found, do nothing
|
||||||
|
if( i === touchList.length) return;
|
||||||
|
var touch = touchList[i];
|
||||||
|
|
||||||
|
event.preventDefault();
|
||||||
|
|
||||||
|
var x = touch.pageX;
|
||||||
|
var y = touch.pageY;
|
||||||
|
return this._onMove(x, y)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// build default stickEl and baseEl //
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
/**
|
||||||
|
* build the canvas for joystick base
|
||||||
|
*/
|
||||||
|
VirtualJoystick.prototype._buildJoystickBase = function()
|
||||||
|
{
|
||||||
|
var canvas = document.createElement( 'canvas' );
|
||||||
|
canvas.width = 126;
|
||||||
|
canvas.height = 126;
|
||||||
|
|
||||||
|
var ctx = canvas.getContext('2d');
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.strokeStyle = this._strokeStyle;
|
||||||
|
ctx.lineWidth = 6;
|
||||||
|
ctx.arc( canvas.width/2, canvas.width/2, 40, 0, Math.PI*2, true);
|
||||||
|
ctx.stroke();
|
||||||
|
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.strokeStyle = this._strokeStyle;
|
||||||
|
ctx.lineWidth = 2;
|
||||||
|
ctx.arc( canvas.width/2, canvas.width/2, 60, 0, Math.PI*2, true);
|
||||||
|
ctx.stroke();
|
||||||
|
|
||||||
|
return canvas;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* build the canvas for joystick stick
|
||||||
|
*/
|
||||||
|
VirtualJoystick.prototype._buildJoystickStick = function()
|
||||||
|
{
|
||||||
|
var canvas = document.createElement( 'canvas' );
|
||||||
|
canvas.width = 86;
|
||||||
|
canvas.height = 86;
|
||||||
|
var ctx = canvas.getContext('2d');
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.strokeStyle = this._strokeStyle;
|
||||||
|
ctx.lineWidth = 6;
|
||||||
|
ctx.arc( canvas.width/2, canvas.width/2, 40, 0, Math.PI*2, true);
|
||||||
|
ctx.stroke();
|
||||||
|
return canvas;
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// move using translate3d method with fallback to translate > 'top' and 'left'
|
||||||
|
// modified from https://github.com/component/translate and dependents
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
VirtualJoystick.prototype._move = function(style, x, y)
|
||||||
|
{
|
||||||
|
if (this._transform) {
|
||||||
|
if (this._has3d) {
|
||||||
|
style[this._transform] = 'translate3d(' + x + 'px,' + y + 'px, 0)';
|
||||||
|
} else {
|
||||||
|
style[this._transform] = 'translate(' + x + 'px,' + y + 'px)';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
style.left = x + 'px';
|
||||||
|
style.top = y + 'px';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
VirtualJoystick.prototype._getTransformProperty = function()
|
||||||
|
{
|
||||||
|
var styles = [
|
||||||
|
'webkitTransform',
|
||||||
|
'MozTransform',
|
||||||
|
'msTransform',
|
||||||
|
'OTransform',
|
||||||
|
'transform'
|
||||||
|
];
|
||||||
|
|
||||||
|
var el = document.createElement('p');
|
||||||
|
var style;
|
||||||
|
|
||||||
|
for (var i = 0; i < styles.length; i++) {
|
||||||
|
style = styles[i];
|
||||||
|
if (null != el.style[style]) {
|
||||||
|
return style;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
VirtualJoystick.prototype._check3D = function()
|
||||||
|
{
|
||||||
|
var prop = this._getTransformProperty();
|
||||||
|
// IE8<= doesn't have `getComputedStyle`
|
||||||
|
if (!prop || !window.getComputedStyle) return module.exports = false;
|
||||||
|
|
||||||
|
var map = {
|
||||||
|
webkitTransform: '-webkit-transform',
|
||||||
|
OTransform: '-o-transform',
|
||||||
|
msTransform: '-ms-transform',
|
||||||
|
MozTransform: '-moz-transform',
|
||||||
|
transform: 'transform'
|
||||||
|
};
|
||||||
|
|
||||||
|
// from: https://gist.github.com/lorenzopolidori/3794226
|
||||||
|
var el = document.createElement('div');
|
||||||
|
el.style[prop] = 'translate3d(1px,1px,1px)';
|
||||||
|
document.body.insertBefore(el, null);
|
||||||
|
var val = getComputedStyle(el).getPropertyValue(map[prop]);
|
||||||
|
document.body.removeChild(el);
|
||||||
|
var exports = null != val && val.length && 'none' != val;
|
||||||
|
return exports;
|
||||||
|
}
|
23
html/manifest.json
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"manifest_version": 2,
|
||||||
|
"name": "Pacman Canvas",
|
||||||
|
"version": "1.0.5",
|
||||||
|
|
||||||
|
"short_name": "Pacman Canvas",
|
||||||
|
"description": "An old classic, rewritten in HTML5",
|
||||||
|
|
||||||
|
"author": "Platzh1rsch",
|
||||||
|
|
||||||
|
"icons": {
|
||||||
|
"128": "img/icon-128.png"
|
||||||
|
},
|
||||||
|
|
||||||
|
"offline_enabled": true,
|
||||||
|
|
||||||
|
"app": {
|
||||||
|
"urls": ["http://pacman.platzh1rsch.ch/"],
|
||||||
|
"launch": {
|
||||||
|
"web_url": "http://pacman.platzh1rsch.ch"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
BIN
html/mp3/die.mp3
Normal file
BIN
html/mp3/eatghost.mp3
Normal file
BIN
html/mp3/powerpill.mp3
Normal file
BIN
html/mp3/theme.mp3
Normal file
BIN
html/mp3/waka.mp3
Normal file
7575
html/package-lock.json
generated
Normal file
31
html/package.json
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
"name": "pacman-canvas",
|
||||||
|
"version": "1.0.5",
|
||||||
|
"description": "pacman-canvas =============",
|
||||||
|
"main": "pacman-canvas.js",
|
||||||
|
"scripts": {
|
||||||
|
"start": "node server.js",
|
||||||
|
"test": "jest",
|
||||||
|
"start:dev": "webpack serve --env NODE_ENV=local"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/platzhersh/pacman-canvas.git"
|
||||||
|
},
|
||||||
|
"author": "platzh1rsch",
|
||||||
|
"license": "ISC",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/platzhersh/pacman-canvas/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/platzhersh/pacman-canvas#readme",
|
||||||
|
"dependencies": {
|
||||||
|
"express": "^4.17.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@webpack-cli/serve": "^1.6.0",
|
||||||
|
"jest": "^26.6.3",
|
||||||
|
"webpack": "^5.27.2",
|
||||||
|
"webpack-cli": "^4.5.0",
|
||||||
|
"webpack-dev-server": "^3.11.2"
|
||||||
|
}
|
||||||
|
}
|
210
html/pacman-canvas.css
Normal file
@ -0,0 +1,210 @@
|
|||||||
|
/* Google Web Fonts */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Press Start 2P';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: url('fonts/PressStart2Play.eot');
|
||||||
|
src: url('fonts/PressStart2Play.eot?iefix') format('eot'),
|
||||||
|
url('fonts/PressStart2Play.woff') format('woff'),
|
||||||
|
url('fonts/PressStart2Play.ttf') format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------- */
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: #000;
|
||||||
|
color: white;
|
||||||
|
font-family: 'Press Start 2P', cursive;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Links */
|
||||||
|
.main a, .main a:link, .main a:active, .main a:visited {
|
||||||
|
padding: 5px;
|
||||||
|
background: #c80a0a;
|
||||||
|
color: rgb(255, 255, 255);
|
||||||
|
}
|
||||||
|
* { box-shadow: none !important; }
|
||||||
|
|
||||||
|
.content, h1, h2, h3, p, div {
|
||||||
|
font-family: 'Press Start 2P', cursive;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
.content[id*=-content]:not(#game-content) {
|
||||||
|
display: none;
|
||||||
|
overflow-y: auto;
|
||||||
|
overflow-x: hidden;
|
||||||
|
}
|
||||||
|
.content img {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
.pull-right {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
.button {
|
||||||
|
background: #c80a0a;
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
#menu-buttons .button { background: rgba(0,0,0,0.4); }
|
||||||
|
#menu-buttons .button:hover, .button:hover { background: rgba(255,255,255,0.2); }
|
||||||
|
.button#back {
|
||||||
|
position: relative;
|
||||||
|
top: -25px;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
.button#score-submit {
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
#highscore-form { margin-top: 8px; }
|
||||||
|
input[type="text"]:hover, input[type="text"]:focus, input[type="password"]:hover, input[type="password"]:focus, textarea:hover, textarea:focus {
|
||||||
|
border: 1px #c80a0a solid;
|
||||||
|
}
|
||||||
|
#highscore-list {}
|
||||||
|
#score { float: right; }
|
||||||
|
|
||||||
|
#myCanvas { border: none; display: block; background: rgb(0,0,0); width: 100%; height: auto;}
|
||||||
|
#canvas-container { position: relative;}
|
||||||
|
#canvas-overlay-container {
|
||||||
|
position: absolute;
|
||||||
|
background: rgba(0,0,0,0.7);
|
||||||
|
height: 100%;
|
||||||
|
width: 720px;
|
||||||
|
max-width: 100%;
|
||||||
|
padding: 1em;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
#canvas-overlay-content {
|
||||||
|
position: absolute;
|
||||||
|
top: 33%;
|
||||||
|
left: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
max-width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
width: 720px;
|
||||||
|
max-width: 100%;
|
||||||
|
padding: 1em;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
#canvas-overlay-content #title {
|
||||||
|
text-transform: uppercase;
|
||||||
|
font-size: 150%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#invalid-score {
|
||||||
|
margin-top: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.canvas { position:absolute; padding-top: 20px;}
|
||||||
|
.main {width: 100%; max-width: 720px; margin: 10px auto; position: static; left: auto;}
|
||||||
|
.content { width: 100%; max-width: 720px; text-align: left; margin: 0;}
|
||||||
|
.container {text-align: center; margin:0; padding: 0;}
|
||||||
|
.wrapper { padding:0;}
|
||||||
|
.game { max-width: 720px; margin: auto; }
|
||||||
|
|
||||||
|
.about { font-size: 10px; margin-top: 20px; text-align: center; display: none;}
|
||||||
|
|
||||||
|
|
||||||
|
body, html { font-size: 15px; }
|
||||||
|
|
||||||
|
div.audio {}
|
||||||
|
audio {display: block; }
|
||||||
|
|
||||||
|
.score { width: 180px; }
|
||||||
|
.score, .lives, .level { display: inline-block; }
|
||||||
|
|
||||||
|
/* ---------- Controls ------------------------*/
|
||||||
|
|
||||||
|
.controls { text-align: center; margin-top: 15px;}
|
||||||
|
.controls-section {
|
||||||
|
height: auto;
|
||||||
|
width: 47%;
|
||||||
|
display: inline-block;
|
||||||
|
margin: 0;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
.controls-left { }
|
||||||
|
.controls-right .controlButton { position: relative; right: -65%; }
|
||||||
|
|
||||||
|
/* Arrow Keys - only displayed when game isn't paused */
|
||||||
|
#game-buttons { display: none; }
|
||||||
|
|
||||||
|
/* Game Menu - displayed when game is paused */
|
||||||
|
#menu-buttons ul, .controls#menu-buttons ul li{ list-style: none; padding: 0;}
|
||||||
|
#menu-buttons ul li {
|
||||||
|
height: 40px;
|
||||||
|
line-height: 40px;
|
||||||
|
font-size: 120%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.controlSound {
|
||||||
|
background: url('img/audio-icon.png');
|
||||||
|
width: 73px;
|
||||||
|
height: 50px;
|
||||||
|
position: relative;
|
||||||
|
bottom: 5px;
|
||||||
|
background-size: 100%;
|
||||||
|
height: 25px;
|
||||||
|
width: 36px;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
#mute {
|
||||||
|
display: none;
|
||||||
|
width: 36px;
|
||||||
|
height: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.controlButton {
|
||||||
|
display: inline-block;
|
||||||
|
width: 90px;
|
||||||
|
height: 90px;
|
||||||
|
margin: 5px;
|
||||||
|
background: none repeat scroll 0% 0% #C80A0A;
|
||||||
|
line-height: 70px;
|
||||||
|
border-radius: 50%;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 60px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.controlButton:hover, .controlButton:active {
|
||||||
|
background: #c00202;
|
||||||
|
}
|
||||||
|
|
||||||
|
.description { display: none; }
|
||||||
|
|
||||||
|
@media screen and (max-width: 1050px) {
|
||||||
|
html, body { background: rgb(0,0,0);}
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 650px) {
|
||||||
|
.game { width: 93%;}
|
||||||
|
.content { max-width: none; }
|
||||||
|
#menu-buttons .button { background: rgba(255,255,255,0.1); }
|
||||||
|
.button:hover { background: rgba(255,255,255,0.3); }
|
||||||
|
.button#back { top: 0; }
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 400px) {
|
||||||
|
|
||||||
|
.nomobile {display: none; }
|
||||||
|
.mobile {display: block; }
|
||||||
|
|
||||||
|
html, body {
|
||||||
|
overflow-x: hidden;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main { margin: 10px auto; }
|
||||||
|
.content { min-height: 0; }
|
||||||
|
|
||||||
|
.controlButton {
|
||||||
|
width: 60px;
|
||||||
|
height: 60px;
|
||||||
|
line-height: 40px;
|
||||||
|
font-size: 40px;
|
||||||
|
}
|
||||||
|
.controls-right .controlButton { right: -55%; }
|
||||||
|
/*canvas#myCanvas { margin: 5px auto; } */
|
||||||
|
|
||||||
|
}
|
1637
html/pacman-canvas.js
Normal file
3
html/pacman-canvas.test.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
test('dummy test', () => {
|
||||||
|
expect((1 + 2)).toBe(3);
|
||||||
|
});
|
14
html/pacman-canvas.webapp
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"name": "Pacman Canvas",
|
||||||
|
"description": "An old classic, rewritten in HTML5",
|
||||||
|
"launch_path": "/",
|
||||||
|
"version": "1.0.5",
|
||||||
|
"developer": {
|
||||||
|
"name": "platzh1rsch",
|
||||||
|
"url": "http://platzh1rsch.ch"
|
||||||
|
},
|
||||||
|
"icons": {
|
||||||
|
"128": "/img/icon-128.png"
|
||||||
|
},
|
||||||
|
"default_locale": "en"
|
||||||
|
}
|
20
html/server.js
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
var express = require('express');
|
||||||
|
var app = express();
|
||||||
|
var path = require('path');
|
||||||
|
|
||||||
|
var myLogger = function (req, res, next) {
|
||||||
|
console.log('GET ' + req.path)
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
|
app.use(myLogger);
|
||||||
|
app.use(express.static('.'))
|
||||||
|
|
||||||
|
// viewed at http://localhost:8080
|
||||||
|
app.get('/', function (req, res, next) {
|
||||||
|
res.sendFile(path.join(__dirname + '/index.htm'));
|
||||||
|
});
|
||||||
|
|
||||||
|
var PORT = process.env.PORT || 8080;
|
||||||
|
|
||||||
|
app.listen(PORT, () => console.log('Server started at http://localhost:' + PORT));
|
499
html/style.css
Normal file
@ -0,0 +1,499 @@
|
|||||||
|
/**********************************************************************************
|
||||||
|
|
||||||
|
.__ __ .__ ____ .__
|
||||||
|
______ | | _____ _/ |________| |__/_ |______ ______ ____ | |__
|
||||||
|
\____ \| | \__ \\ __\___ / | \| \_ __ \/ ___// ___\| | \
|
||||||
|
| |_> > |__/ __ \| | / /| Y \ || | \/\___ \\ \___| Y \
|
||||||
|
| __/|____(____ /__| /_____ \___| /___||__| /____ >\___ >___| / .ch
|
||||||
|
|__| \/ \/ \/ \/ \/
|
||||||
|
|
||||||
|
**********************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Socialico';
|
||||||
|
src: url(fonts/Socialico.otf) format('otf'),
|
||||||
|
url(fonts/Socialico.ttf) format('ttf');
|
||||||
|
src: local('Socialico'), local(Socialico),
|
||||||
|
url(fonts/Socialico.otf) format('opentype');
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
a img { border: none; }
|
||||||
|
|
||||||
|
h1, h2, h3 {
|
||||||
|
font-family: 'Press Start 2P', cursive;
|
||||||
|
font-family: 'Codystar', cursive;
|
||||||
|
font-family: 'Acme', sans-serif;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
h1 { font-size: 2em; }
|
||||||
|
h2 { font-size: 1.7em; }
|
||||||
|
h3 { font-size: 1.5em; }
|
||||||
|
|
||||||
|
|
||||||
|
html, body {
|
||||||
|
width:100%;
|
||||||
|
font-family: 'Quando', serif;
|
||||||
|
font-size: 14px;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
min-height: 100%;
|
||||||
|
height: 100%;
|
||||||
|
line-height: 23px;
|
||||||
|
background: url('img/bg-pattern-black.png') repeat;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
overflow-x: hidden;
|
||||||
|
overflow-y: scroll;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.layout {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
aside { background-color: rgba(255, 255, 255, 0.1); }
|
||||||
|
aside > * { margin: 0 15px; padding: 15px 0; }
|
||||||
|
|
||||||
|
.wrapper { width: 100%; }
|
||||||
|
.mobile { display: none; }
|
||||||
|
|
||||||
|
.sidebar {
|
||||||
|
display: inline-block;
|
||||||
|
width: 320px;
|
||||||
|
float: left;
|
||||||
|
background: url(bg-pattern-green.png) repeat;
|
||||||
|
height: 100%;
|
||||||
|
position: fixed;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
font-family: 'Acme', sans-serif;
|
||||||
|
text-transform: uppercase;
|
||||||
|
/*color: rgb(31,52,4); - dark green */
|
||||||
|
color: rgba(0,0,0,0.55);
|
||||||
|
text-align: left;
|
||||||
|
-webkit-box-shadow: 2px 2px 5px rgba(50, 50, 50, 0.75);
|
||||||
|
-moz-box-shadow: 2px 2px 5px rgba(50, 50, 50, 0.75);
|
||||||
|
box-shadow: 2px 2px 5px rgba(50, 50, 50, 0.75);
|
||||||
|
}
|
||||||
|
|
||||||
|
::selection {
|
||||||
|
background: rgba(24, 106, 12,0.7); /* Safari */
|
||||||
|
}
|
||||||
|
|
||||||
|
::-moz-selection {
|
||||||
|
background: rgba(24, 106, 12,0.7); /* Firefox */
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------
|
||||||
|
|
||||||
|
Sidebar: Navigation
|
||||||
|
|
||||||
|
*/
|
||||||
|
ul.nav {
|
||||||
|
list-style: none outside none;
|
||||||
|
font-size: 15px;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
ul.nav.sub {
|
||||||
|
background-color: rgba(0,0,0,0.3);
|
||||||
|
background/*\**/: url(img/bg/black_30.png)\9;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
ul.nav.sub.active {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.nav li {
|
||||||
|
line-height: 40px;
|
||||||
|
list-style: none outside none;
|
||||||
|
padding-left: 2em;
|
||||||
|
transition-property: background-color, padding-left;
|
||||||
|
transition-duration: 0.7s;
|
||||||
|
}
|
||||||
|
ul.nav.sub li{
|
||||||
|
padding-left: 2.8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.nav li:hover { background-color: rgba(255,255,255,0.2); background/*\**/: url(img/bg/white_20.png)\9; *background: url(img/bg/white_20.png); padding-left: 2.5em;}
|
||||||
|
ul.nav li.active { background-color: rgba(255,255,255,0.1); background/*\**/: url(img/bg/white_20.png)\9; *background: url(img/bg/white_20.png);}
|
||||||
|
|
||||||
|
ul.nav a, ul.nav a:link, ul.nav a:active, ul.nav a:visited, ul.nav a:hover, ul.nav a:focus { color: rgb(31,52,4); text-decoration: none; font-size: 1.5em;}
|
||||||
|
|
||||||
|
|
||||||
|
.main {
|
||||||
|
display: inline-block;
|
||||||
|
position: static;
|
||||||
|
margin: 0 auto;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header { display: none;}
|
||||||
|
|
||||||
|
.header, .content, .footer {
|
||||||
|
margin: 30px;
|
||||||
|
max-width: 700px;
|
||||||
|
background: rgba(0,0,0,0.4);
|
||||||
|
background/*\**/: url(img/bg/black_40.png)\9;
|
||||||
|
color: rgba(255,255,255,0.9);
|
||||||
|
color/*\**/: rgb(250,250,250)\9;
|
||||||
|
padding: 4em;
|
||||||
|
width: 700px;
|
||||||
|
-webkit-box-shadow: 2px 2px 5px rgba(50, 50, 50, 0.75);
|
||||||
|
-moz-box-shadow: 2px 2px 5px rgba(50, 50, 50, 0.75);
|
||||||
|
box-shadow: 2px 2px 5px rgba(50, 50, 50, 0.75);
|
||||||
|
}
|
||||||
|
|
||||||
|
.main a, .main a:link, .main a:active, .main a:visited {
|
||||||
|
/*color: rgba(20,20,20,0.9);
|
||||||
|
background: rgba(250,250,250,0.6);*/
|
||||||
|
|
||||||
|
/*color: rgba(255,255,255,0.8);
|
||||||
|
|
||||||
|
background: #367e20;*/
|
||||||
|
|
||||||
|
color: #367e20;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.main a:hover, .main a:focus {
|
||||||
|
/*color: rgba(20,20,20,0.9);
|
||||||
|
text-decoration: none;
|
||||||
|
background: rgba(250,250,250,0.5);*/
|
||||||
|
|
||||||
|
text-decoration: underline;
|
||||||
|
color: #367e20;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
min-height: 400px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.logo {
|
||||||
|
width: 220px;
|
||||||
|
display: block;
|
||||||
|
margin: 30px auto 10px auto;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.social{
|
||||||
|
font-family: 'Socialico';
|
||||||
|
text-transform: none;
|
||||||
|
font-size: 40px;
|
||||||
|
text-align:center;
|
||||||
|
line-height: 55px;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
.social a, .social a:link, .social a:active, .social a:visited, .social a:hover, .social a:focus {
|
||||||
|
/*color: rgb(31, 52, 4); - dark green */
|
||||||
|
color: rgba(0,0,0,0.55);
|
||||||
|
text-decoration: none;
|
||||||
|
transition-property: opacity;
|
||||||
|
transition-duration: 0.3s;
|
||||||
|
}
|
||||||
|
.social a:hover {opacity: 0.8;}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------
|
||||||
|
|
||||||
|
Boxes
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.box2, .box3 {
|
||||||
|
display: inline-block;
|
||||||
|
margin-right: 5px !important;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box2 {
|
||||||
|
width: 50%;
|
||||||
|
max-width: 320px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box3 {
|
||||||
|
width: 33%;
|
||||||
|
max-width: 205px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div + .box2, div + box3 { margin: 5px !important;}
|
||||||
|
|
||||||
|
.portfolio-tile {
|
||||||
|
width: 200px;
|
||||||
|
height: 200px;
|
||||||
|
border: 1px solid rgba(0,0,0,0.5);
|
||||||
|
background: rgba(0,0,0,0.5);
|
||||||
|
display: inline-block;
|
||||||
|
margin-right: 10px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-tile:hover {
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-tile div {
|
||||||
|
visibility: hidden;
|
||||||
|
display: inline-block;
|
||||||
|
height: 35px;
|
||||||
|
width: 100%;
|
||||||
|
top: 165px;
|
||||||
|
line-height: 25px;
|
||||||
|
position: relative;
|
||||||
|
background: rgba(0,0,0,0.6);
|
||||||
|
background-size: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-tile:hover div {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.portfolio-label {
|
||||||
|
margin: auto 10px;
|
||||||
|
line-height: 35px;
|
||||||
|
height: 35px;
|
||||||
|
display: block;
|
||||||
|
vertical-align: middle;
|
||||||
|
color: #fff !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@media screen and (max-width: 1500px) {
|
||||||
|
.main {
|
||||||
|
position:absolute;
|
||||||
|
left: 320px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 1040px) {
|
||||||
|
.box2 { width: 45%;}
|
||||||
|
.box3 { width: 27%;}
|
||||||
|
.portfolio-tile { width: 175px; height: 175px; }
|
||||||
|
.portfolio-tile div { top: 140px; }
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 800px) {
|
||||||
|
.portfolio-tile { width: 150px; height: 150px; margin: 0 7px 7px 0;}
|
||||||
|
.portfolio-tile div { top: 115px; }
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 650px) {
|
||||||
|
.portfolio-tile {
|
||||||
|
width: 200px;
|
||||||
|
height: 200px;
|
||||||
|
left: 50%;
|
||||||
|
position: relative;
|
||||||
|
margin-left: -100px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.portfolio-tile div {
|
||||||
|
top: 165px;
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 320px) {
|
||||||
|
.box2 { width: 42%;}
|
||||||
|
.box3 { width: 25%;}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------
|
||||||
|
|
||||||
|
Tables
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
background-color: rgb(255,255,255);
|
||||||
|
color: rgba(0,0,0,0.9);
|
||||||
|
padding: 0;
|
||||||
|
border-spacing: 0;
|
||||||
|
/* padding: 1em; */
|
||||||
|
margin: 0.5em 0px !important;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
td {
|
||||||
|
margin: 0;
|
||||||
|
padding: 1em;
|
||||||
|
}
|
||||||
|
thead {
|
||||||
|
font-weight: bold;
|
||||||
|
background: url(bg-pattern-green.png) repeat;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
tbody tr:nth-child(even){
|
||||||
|
background-color: #efefef;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------
|
||||||
|
|
||||||
|
Forms
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
input, select, textarea {
|
||||||
|
padding: 0.4em;
|
||||||
|
margin: 0.4em;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type=button], input[type=submit] {
|
||||||
|
background: #326a21;
|
||||||
|
text-transform: uppercase;
|
||||||
|
/*font-family: 'Acme',sans-serif;*/
|
||||||
|
border-radius: 15px;
|
||||||
|
color: #fff;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
input[type=text], input[type=password], textarea {
|
||||||
|
box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.3) inset;
|
||||||
|
}
|
||||||
|
input[type=button]:hover, input[type=button]:focus, input[type=submit]:hover, input[type=submit]:focus {
|
||||||
|
background: #367e20;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type=text]:hover, input[type=text]:focus, input[type=password]:hover, input[type=password]:focus, textarea:hover, textarea:focus {
|
||||||
|
border: 1px solid #009600;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------
|
||||||
|
|
||||||
|
Swipe.js - Javascript Slider
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.swipe {
|
||||||
|
margin: 1em 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
.swipe ul { padding: 0;}
|
||||||
|
.swipe li div {
|
||||||
|
padding: 1em;
|
||||||
|
background: rgba(255,255,255,0.2);
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Mobile CSS - Medium (Tablets, small Screens) */
|
||||||
|
|
||||||
|
@media screen and (max-width: 1050px) {
|
||||||
|
|
||||||
|
.main {
|
||||||
|
background: rgba(0,0,0,0.4);
|
||||||
|
background/*\**/: url(img/bg/black_40.png)\9;
|
||||||
|
background-attachment: fixed;
|
||||||
|
}
|
||||||
|
.header, .content, .footer {
|
||||||
|
margin: 0;
|
||||||
|
max-width: none;
|
||||||
|
width: auto;
|
||||||
|
height:100%;
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Mobile CSS - Small (Smartphones) */
|
||||||
|
@media screen and (max-width: 650px) {
|
||||||
|
|
||||||
|
html, body { height: auto;}
|
||||||
|
|
||||||
|
.main { background: none; }
|
||||||
|
body { background: rgba(0,0,0,0.4);
|
||||||
|
background/*\**/: url(img/bg/black_40.png)\9;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 1.8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mobile {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.nomobile {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
.logo {
|
||||||
|
height: 90px;
|
||||||
|
width: auto;
|
||||||
|
/*display: inline-block;
|
||||||
|
float: left;*/
|
||||||
|
margin: 5px auto 5px auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar {
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
position:relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header, .content, .footer {
|
||||||
|
margin: 0;
|
||||||
|
max-width: 650px;
|
||||||
|
/*padding: 5px 10px;*/
|
||||||
|
padding: 5px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main {
|
||||||
|
position: relative;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
overflow-x: hidden;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.header > *, .content > *, .footer > * {
|
||||||
|
margin: 5px 10px;
|
||||||
|
}
|
||||||
|
.footer { position: relative; margin-bottom: 0; height: 40px;}
|
||||||
|
|
||||||
|
ul.nav {
|
||||||
|
margin: 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.nav.sub {
|
||||||
|
margin: 0 auto;
|
||||||
|
background: rgba(0,0,0,0.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.nav li, ul.nav.sub li{
|
||||||
|
padding: 0 0.5em;
|
||||||
|
margin: 0;
|
||||||
|
display: inline-block;
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
ul.nav li:hover, ul.nav.sub li:hover {
|
||||||
|
padding: 0 0.5em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 360px) {
|
||||||
|
ul.nav.sub li { display: block; }
|
||||||
|
.box2, .box3 { display: block; width: 100%;}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 320px) {
|
||||||
|
ul.nav li { margin: 0; padding: 0 0.3em;}
|
||||||
|
ul.nav li:hover, ul.nav.sub li:hover { padding: 0 0.3em; }
|
||||||
|
}
|
||||||
|
|
||||||
|
#adsense {
|
||||||
|
text-align: center;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
#adsense .adsbygoogle {
|
||||||
|
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
BIN
html/wav/die.wav
Normal file
BIN
html/wav/eatghost.wav
Normal file
BIN
html/wav/powerpill.wav
Normal file
BIN
html/wav/theme.wav
Normal file
BIN
html/wav/waka.wav
Normal file
6
html/web-app-manifest.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"verification_key": "eca78f4d-14f3-4fe7-8b44-3e0006a9a9c7",
|
||||||
|
"version": "1.0.5",
|
||||||
|
"type": "web",
|
||||||
|
"last_update": "2018-03-06 16:45:11+0000"
|
||||||
|
}
|
16
html/webpack.config.js
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
module.exports = (env) => {
|
||||||
|
|
||||||
|
console.log('NODE_ENV: ', env.NODE_ENV);
|
||||||
|
return {
|
||||||
|
entry: './',
|
||||||
|
mode: 'development',
|
||||||
|
devServer: {
|
||||||
|
port: 4200,
|
||||||
|
hot: true,
|
||||||
|
open: true,
|
||||||
|
openPage: 'index.htm'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
2
start_nginx.sh
Executable file
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
/usr/sbin/nginx -g "daemon off;"
|