1. Einführung in den Spielhintergrund (Unsinn in der Vorderseite):
Eines Tages Anfang Mai sah ich eine bestimmte Website, die dieses Spiel empfahl, Pongo. Ich sah ziemlich gut aus und versuchte es mit iPad. Nachdem ich zwei Spiele gespielt hatte, hatte ich das Gefühl, dass es eine gute Sache war, und es war ziemlich befriedigend, weil es ein Spiel war, das eine Art geschuldete Hand war. Jeder weiß es.
Aber nach einer Weile stellte ich fest, dass das Spiel einige Fehler auf dem iPad zu haben schien. Ich würde stecken bleiben, nachdem ich eine Weile gespielt hatte, und ich konnte es nur zum Rückzug zwingen. Es war wirklich herzzerreißend und die Platte wartete immer noch darauf, gebrochen zu werden.
was zu tun? Die Idee, dass es besser ist, Spiele zu spielen, als Ihre eigenen Spiele zu spielen, schien wieder böse, und dann warf ich den Pad auf den herzzerreißenden Freund meines Freundes. Ich kehrte still zum Computer zurück und fing an, etwas zu schreiben, das ich nicht stecken konnte.
Es dauerte ungefähr zwei Stunden, um den grundlegenden Rahmen aufzuschreiben, und warf ihn dann in Sinaapp und versuchte es. Es war im Grunde das Beste zu spielen und zu duschen und ins Bett zu gehen.
Als ich am nächsten Tag aufwachte, habe ich einige Zeit damit verbracht, die Oberfläche zu entwerfen, weil ich am Wochenende nichts zu tun hatte. Leider fand ich selbst einige ernsthafte Fehler und brauchte schließlich einige Zeit, um sie zu korrigieren.
Schließlich hieß das Spiel "Pongo+" (klicken Sie auf mich, um auf Mobiltelefonen zu spielen). Der Computer wird vorerst nicht unterstützt. Übrigens wurde der Quellcode auf GitHub hochgeladen und das Einreichungs -Score -Modul entfernt.
2. Spiele -Testwebsite:
Pongo+ (nur Mobile): http://mypongo.sinaapp.com/
Github Open Source (Fork ist willkommen, das Spiel besser zu machen): https://github.com/chenreason/pongo/blob/gh-pages/index.html
3. Spielregeln und Gameplay:
Wenn Sie auf den Bildschirm klicken, wird die Richtung der Rahmenbewegung geändert. Wenn Sie auf die Lünette klicken, wird die Richtung der Lünette einmal geändert, um nur die kleinen Kugeln zu blockieren und zu verhindern, dass sie aus dem großen Kreis hinausgehen. Je länger die Zeit ist, desto besser! Schließlich können Sie Ihre eigenen Ergebnisse für das Ranking einreichen!
4. Die im Spiel verwendete Technologie:
HTML, CSS, JavaScript, Leinwand, PHP
5. Spieledesign -Ideen:
a) Verwenden Sie Leinwand, um die Hauptschnittstelle des Spiels zu zeichnen. Der Boden ist ein monochromes Rechteck, das mit einem großen Kreis bedeckt ist, und ein kleiner Kreis und eine Schallwand werden auf dem großen Kreis gezeichnet. Es gibt auch einen super kleinen Kreis mit einer Größe von 1px in der Mitte der Schallwand (zur Kollisionserkennung).
B) Es gibt 8 Bewegungsanweisungen kleiner Kreise: obere, untere, linke, rechts, obere linke, untere linke, obere rechts und unten rechts.
c) Es gibt nur zwei Bewegungsanweisungen der Schallwand, im Uhrzeigersinn und gegen den Uhrzeigersinn.
d) Die Kollisionserkennung beinhaltet nicht die Verwendung des Motors, sondern macht das Entfernungsurteil auf der Grundlage des kleinen Kreises und des Superkreises in der Mitte der Schalldämmung, wodurch eine einfache Kollisionserkennung erreicht wird.
e) Die Richtung des Rückpralls, nachdem der Ball kollidiert wurde, und das allgemeine Wissen wird verwendet, um ihn aufzulisten, und es gibt insgesamt 8 Situationen.
6. Schwierigkeiten in der Spielumsetzung:
a) Kollisionserkennung.
b) Timer -Setinterval -Freigabezeitpunkt und ob es klar und gründlich ist.
c) die Beziehung zwischen der Länge des Timerzyklus und dem Spielerlebnis.
D) Game Fluency -Probleme durch die unterschiedliche Leistung von Android- und iOS -Geräten.
7. Bestehende Probleme mit dem Spiel:
A) Da die Kollisionserkennung den Mittelabstand zwischen zwei Kreisen vergleichen soll und die Verwendung von Timern aufgrund des extrem kurzen Timer -Intervalls einhergeht, sind tatsächlich Dutzende von Kollisionen hinter einer Kollision aufgetreten, die durch das Blockenauge beobachtet wurde. Dies wird dazu führen, dass sich die tatsächliche Rebound -Richtung des Balls vom tatsächlichen physischen Theorem unterscheidet. Nach der Optimierung ist die Wahrscheinlichkeit des Auftretens gering, wurde jedoch nicht vermieden. Daher werden einige Spieler feststellen, dass das Spiel, wenn der Kreis nicht genau die Mitte der Schallwand trifft, scheitert.
b) Da die Funktionen zu ausführlich, niedrig effektiv und die Verwendung von Timern sind, unterscheidet sich das Spielerlebnis auf Android von iOS oder anderen mobilen Geräten (im Allgemeinen ist iOS auf Android zurückzuführen).
c) Die Ranking-Liste hat keine automatischen Echtzeit-Updates erreicht. (Die Datenbank wird noch nicht verwendet)
8. Spielschnittstelle Vorschau:
(Abbildung 1 ist die erste Ausgabe, Abbildung 2 hat die Taste entfernt, Abbildung 3 ist die endgültige Ausgabe und Abbildung 4 ist die Rangliste.
Abbildung 1
Abbildung 2
Abbildung 3
9. Teil des Quellcode des Spiels JavaScript:
Die Codekopie lautet wie folgt:
var ifingame = 0;
var maxGrade = 0, grade = 0;
var grade1, grade2;
var Spitzname;
var GameSpeed = 1,4; // Ballgeschwindigkeit
var lineSpeed = math.pi/95; // Verfolgung der Zeilengeschwindigkeit
var crashDistancefaild = -7; // Kollisionserkennungsparameter
var crashDistancesucc = 15
var fantanjuli = 7;
var themaxgradeline = 12.1;
Funktion getcookie1 (Spitzname)
{
if (document.cookie.length> 0)
{
c_start = document.cookie.indexof (Spitzname + "=")
if (c_start! =-1)
{
c_start = c_start + spitzname.length + 1;
c_end = document.cookie.indexof (",", c_start);
if (c_end ==-1)
c_end = document.cookie.length;
return undecape (document.cookie.substring (c_start, c_end));
}
}
zurückkehren ""
}
Funktion getcookie2 (MyMaxgrade)
{
if (document.cookie.length> 0)
{
c_start = document.cookie.indexof (myMaxgrade + "=")
if (c_start! =-1)
{
c_start = c_start + myMaxgrade.length + 1;
c_end = document.cookie.indexof (";", c_start);
if (c_end ==-1)
c_end = document.cookie.length;
return undecape (document.cookie.substring (c_start, c_end));
}
}
zurückkehren ""
}
Funktionsetokookie (Spitzname, Wert, MyMaxgrade, MaxGrade, Expiredays)
{
var exdate = neues Datum ()
exDate.setDate (exDate.getDate ()+expiredays)
document.cookie = spickname + "=" + Escape (value) + "," + myMaxgrade + "=" + Escape (maximal) + ((expiredays == null)? "": "; expires =" + exDate.togmtstring ());
}
Funktion checkcookie ()
{
Spitzname = getcookie1 ('Spitzname');
maxGrade = parseInt (getCookie2 ('MYMAXGRADE');
if (isnan (maxGrade) == true)
{
MaxGrade = 0;
}
if (Spitzname! = NULL && Spitzname! = "")
{
alert ('Willkommen'+Spitzname+'zurück!'+'/n'+"Wenn es dir gefällt, teilen Sie es bitte ~");
}
anders
{
Spitzname = Eingabeaufforderung ('Bitte geben Sie Ihren Spitznamen ein: (Der Name ist zu lang und wird unvollständig angezeigt) "," ")
if (Spitzname! = NULL && Spitzname! = "")
{
var maxgradestring = maxGrade.toString ();
setCookie ('Spitzname', Spitzname, 'MyMaxgrade', MaxDgring, 365);
}
}
}
var objpane = document.getElementById ("Bereich");
var ctxpane = objpane.getContext ("2d");
ctxpane.translate (150,150); // Erforderliche Übersetzung von Canvas Center Point
Funktion sendmail ()
{
if (Grad2> themenAxgradeline)
var max_grade = grade2;
window.location.href = 'index.php? max_grad ='+max_grad+'& nick_name ='+spitzname;
/* {
<? Php
$ grade = $ _ get ['max_grad'];
$ spitzname = $ _ GET ['NICK_NAME'];
$ mail = new Saemail ();
$ ret = $ mail-> schnasendsend ('[email protected]', $ grade, $ spitzname, '[email protected]', 'mypongo');
$ mail-> clean ();
?>
}*/
ALERT (Spitzname+"Ihre Note lautet:"+grade2+"erfolgreich eingereicht ~");
}
var sayection = {
Shang: 1,
xia: 5,
Zuo: 7,
Sie: 3,
ZuosHang: 8,
Zuoxie: 6,
YouShang: 2,
youxia: 4,
Uhr: 0,
Antiklocke: 9,
};//Richtung
var canvas = {
Breite: 300,
Höhe: 300,
};//Leinwand
var bigcircle = {// Big Circle Parameter
x: 0, // der x-achse-Koordinatenwert der Mitte des Kreises
y: 0, // der y-achse-Koordinatenwert der Mitte des Kreises
R: 150, // der Radius des Kreises
C: 'RGB (255.255.255)',
}; // Dayuan
var smallcircle = {// smallcircle Parameter
x: 0, // der x-achse-Koordinatenwert der Mitte des Kreises
y: 0, // der y-achse-Koordinatenwert der Mitte des Kreises
R: 12, // der Radius des Kreises
C: 'RGB (204,105,106)',
Richtung: saitirection.xia,
}; // kleiner Kreis
var line = {// Parameter der Schusslinie
x: 0, // der x-achse-Koordinatenwert der Mitte des Kreises
y: 0, // der y-achse-Koordinatenwert der Mitte des Kreises
R: 150, // der Radius des Bogens
Start: (math.pi/2-math.pi/16),
Ende: (math.pi/2+math.pi/16),
C: 'RGB (55,55,55)',
Richtung: stectirection.anticlock,
}; // Tracking -Linie
var dot = {// Tracking Point -Parameter
x: (bigcircle.r*math.cos (line.start+math.pi/16)), // Verwenden Sie den großen Kreis als Ursprung
y: (bigcircle.r*math.sin (line.start+math.pi/16)),
R: 1,
} // Tracking Point
Funktionswechselung ()
{
if (line.direction == saidirection.clock)
{
line.direction = sayirection.anticlock;
}
anders
{
line.direction = sayirection.clock;
}
}
Funktion getDistance () {
var distanz = math.sqrt ((smallcircle.x)*(smallcircle.x)+(smallcircle.y)*(smallcircle.y));
Rückstand;
} // Kehren Sie zum quadratischen Abstand zwischen dem kleinen Ball und dem großen Circle Center GetDistance zurück ()
function ifGameOver () {// beurteilen Sie, ob es außerhalb der Grenzen liegt
if ((getDistance () - bigcircle.r)> 5)
zurückkehren;
anders
false zurückgeben;
} // Beurteilen Sie, ob das Spiel IFGameOver endet ()
Funktion iFcrash () {// Kollisionserkennung
var dx = dot.x-smallcircle.x;
var dy = dot.y-smallcircle.y;
var dd = math.sqrt (dx*dx+dy*dy);
if (dd <crashDistancesucc)
zurückkehren;
anders
false zurückgeben;
} // Kollisionserkennung ifcrash ()
Funktion Randomback ()
{
var x = math.floor (math.random ()*3);
Switch (smallcircle.direktion) {
Case sayection.shang:
{
Schalter (x)
{
Fall 0:
smallcircle.direction = sayirection.xia;
smallcircle.y = smallcircle.y+fantanjuli;
brechen;
Fall 1:
smallcircle.direction = sayirection.zuoxia;
smallcircle.x = smallcircle.x-fantanjuli;
smallcircle.y = smallcircle.y+fantanjuli;
brechen;
Fall 2:
smallcircle.direction = sayirection.youxia;
smallcircle.x = smallcircle.x+fantanjuli;
smallcircle.y = smallcircle.y+fantanjuli;
brechen;
Standard:
brechen;
}brechen;
}
Case sayection.xia:
{
Schalter (x)
{
Fall 0:
smallcircle.direction = sayirection.shang;
smallcircle.y = smallcircle.y-fantanjuli;
brechen;
Fall 1:
smallcircle.direction = sayirection.zuoSHang;
smallcircle.x = smallcircle.x-fantanjuli;
smallcircle.y = smallcircle.y-fantanjuli;
brechen;
Fall 2:
smallcircle.direction = sayirection.yousHang;
smallcircle.x = smallcircle.x+fantanjuli;
smallcircle.y = smallcircle.y-fantanjuli;
brechen;
Standard:
brechen;
}brechen;
}
Case sayection.zuo:
{
Schalter (x)
{
Fall 0:
smallcircle.direction = sayirection.you;
smallcircle.x = smallcircle.x+fantanjuli;
brechen;
Fall 1:
smallcircle.direction = sayirection.yousHang;
smallcircle.x = smallcircle.x+fantanjuli;
smallcircle.y = smallcircle.y-fantanjuli;
brechen;
Fall 2:
smallcircle.direction = sayirection.youxia;
smallcircle.x = smallcircle.x+fantanjuli;
smallcircle.y = smallcircle.y+fantanjuli;
brechen;
Standard:
brechen;
}brechen;
}
Case sayection.you:
{
Schalter (x)
{
Fall 0:
smallcircle.direction = sayirection.zuo;
smallcircle.x = smallcircle.x-fantanjuli;
brechen;
Fall 1:
smallcircle.direction = sayirection.zuoxia;
smallcircle.x = smallcircle.x-fantanjuli;
smallcircle.y = smallcircle.y+fantanjuli;
brechen;
Fall 2:
smallcircle.direction = sayirection.zuoSHang;
smallcircle.x = smallcircle.x-fantanjuli;
smallcircle.y = smallcircle.y-fantanjuli;
brechen;
Standard:
brechen;
}brechen;
}
Case sayection.zuoSHang:
{
Schalter (x)
{
Fall 0:
smallcircle.direction = sayirection.youxia;
smallcircle.x = smallcircle.x+fantanjuli;
smallcircle.y = smallcircle.y+fantanjuli;
brechen;
Fall 1:
smallcircle.direction = sayirection.xia;
smallcircle.y = smallcircle.y+fantanjuli;
brechen;
Fall 2:
smallcircle.direction = sayirection.you;
smallcircle.x = smallcircle.x+fantanjuli;
brechen;
Standard:
brechen;
}brechen;
}
Fallrahmenanlage.zuoxie:
{
Schalter (x)
{
Fall 0:
smallcircle.direction = sayirection.yousHang;
smallcircle.x = smallcircle.x+fantanjuli;
smallcircle.y = smallcircle.y-fantanjuli;
brechen;
Fall 1:
smallcircle.direction = sayirection.shang;
smallcircle.y = smallcircle.y-fantanjuli;
brechen;
Fall 2:
smallcircle.direction = sayirection.you;
smallcircle.x = smallcircle.x+fantanjuli;
brechen;
Standard:
brechen;
}brechen;
}
Fallrahmenanlage.yousHang:
{
Schalter (x)
{
Fall 0:
smallcircle.direction = sayirection.zuoxia;
smallcircle.x = smallcircle.x-fantanjuli;
smallcircle.y = smallcircle.y+fantanjuli;
brechen;
Fall 1:
smallcircle.direction = sayirection.zuo;
smallcircle.x = smallcircle.x-fantanjuli;
brechen;
Fall 2:
smallcircle.direction = sayirection.xia;
smallcircle.y = smallcircle.y+fantanjuli;
brechen;
Standard:
brechen;
}brechen;
}
Case sayirection.youxia:
{
Schalter (x)
{
Fall 0:
smallcircle.direction = sayirection.zuoSHang;
smallcircle.x = smallcircle.x-fantanjuli;
smallcircle.y = smallcircle.y-fantanjuli;
brechen;
Fall 1:
smallcircle.direction = sayirection.zuo;
smallcircle.x = smallcircle.x-fantanjuli;
brechen;
Fall 2:
smallcircle.direction = sayirection.shang;
smallcircle.y = smallcircle.y-fantanjuli;
brechen;
Standard:
brechen;
}brechen;
}
Standard:
{
brechen;
}
}
} // Der Ball hat Randomback zufällig umgekehrt ()
Funktion smallcirclecledirection ()
{
Switch (smallcircle.direktion) {// beweg dich nach der Richtung des Balls
Case sayection.shang:
{
smallcircle.y = smallcircle.y-gamespeed;
Klasse ++;
if (grade> maxGrade)
{
MaxGrade = Klasse;
NewRecoder ();
}
Addone ();
brechen;
}
Case sayection.xia:
{
smallcircle.y = smallcircle.y+gamespeed;
Klasse ++;
if (grade> maxGrade)
{
MaxGrade = Klasse;
NewRecoder ();
}
Addone ();
brechen;
}
Case sayection.zuo:
{
smallcircle.x = smallcircle.x-gamespeed;
Klasse ++;
if (grade> maxGrade)
{
MaxGrade = Klasse;
NewRecoder ();
}
Addone ();
brechen;
}
Case sayection.you:
{
smallcircle.x = smallcircle.x+gamespeed;
Klasse ++;
if (grade> maxGrade)
{
MaxGrade = Klasse;
NewRecoder ();
}
Addone ();
brechen;
}
Case sayection.zuoSHang:
{
smallcircle.x = smallcircle.x-gamespeed*0,8;
smallcircle.y = smallcircle.y-gamespeed*0,8;
Klasse ++;
if (grade> maxGrade)
{
MaxGrade = Klasse;
NewRecoder ();
}
Addone ();
brechen;
}
Fallrahmenanlage.zuoxie:
{
smallcircle.x = smallcircle.x-gamespeed*0,8;
smallcircle.y = smallcircle.y+gamespeed*0,8;
Klasse ++;
if (grade> maxGrade)
{
MaxGrade = Klasse;
NewRecoder ();
}
Addone ();
brechen;
}
Fallrahmenanlage.yousHang:
{
smallcircle.x = smallcircle.x+gamespeed*0,8;
smallcircle.y = smallcircle.y-gamespeed*0,8;
Klasse ++;
if (grade> maxGrade)
{
MaxGrade = Klasse;
NewRecoder ();
}
Addone ();
brechen;
}
Case sayirection.youxia:
{
smallcircle.x = smallcircle.x+gamespeed*0,8;
smallcircle.y = smallcircle.y+gamespeed*0,8;
Klasse ++;
if (grade> maxGrade)
{
MaxGrade = Klasse;
NewRecoder ();
}
Addone ();
brechen;
}
Standard:
{
brechen;
}
}
} // Der Ball bewegt die SmallCirclecled Direction ()
/*Zeichnen Sie den unteren Kreis*////
Ctxpane.BeginPath (); // Dayuan
ctxpane.arc (bigcircle.x, bigcircle.y, bigcircle.r, 0, math.pi*2, true);
ctxpane.FillStyle = bigCircle.c;
ctxpane.fill ();
ctxpane.closepath ();
/*Zeichnen Sie die untere Tracking -Linie*/
ctxpane.beginPath ();
ctxpane.linewidth = 6;
ctxpane.strokestyle = line.c;
ctxpane.arc (line.x, line.y, line.r, line.start, line.end, false);
ctxpane.stroke ();
ctxpane.closepath ();
Funktion Tapme () // Tapme
{
ctxpane.beginPath ();
ctxpane.strokestyle = "RGB (255.222.195)";
ctxpane.font = "80px Papyrus";
ctxpane.stroketext ('tap',-95,30);
Ctxpane.FillStyle = "RGB (255,205,105)";
ctxpane.font = "35px papyrus";
ctxpane.FillText ('me', 70,30);
ctxpane.closepath ();
}
Funktion NewRecoder ()
{
ctxpane.beginPath ();
ctxpane.FillStyle = "RGB (255,0,0)";
ctxpane.font = "18px papyrus";
ctxpane.FillText ("New!", 58,80);
ctxpane.closepath ();
}
Funktion addone ()
{
Grad1 = (Klasse/150) .Tofixed (1);
grade2 = (maxGrade/150) .Tofixed (1);
var sagt1 = "jetzt";
var sagt2 = "bestes"
ctxpane.beginPath ();
ctxpane.strokestyle = "RGB (250.222.185)";
ctxpane.font = "60px papyrus";
ctxpane.stroketext (Grad1, -45, -60);
ctxpane.stroketext (Grad2, -45,100);
ctxpane.FillStyle = "RGB (255,0,100)";
ctxpane.font = "15px papyrus";
ctxpane.FillText (Say1,58, -60);
ctxpane.FillStyle = "RGB (255,0,100)";
ctxpane.font = "15px papyrus";
ctxpane.FillText (Say2,58,100);
ctxpane.closepath ();
}
Funktion moveTest () {
if (ifGameover ())
{
ifingame = 0;
if (MaxGrade> ParseInt (getcookie2 ('myMaxgrade')))
{
setCookie ('Spitzname', Spitzname, 'MyMaxgrade', MaxGrade.toString (), 365);
}
ClearInterval (Timer);
tapme ();
}
anders
{
if (ifcrash ())
{
Randomback ();
}
ctxpane.clearRect (-150, -150,300,300); // den Bildschirm löschen
Ctxpane.BeginPath (); // Dayuan
ctxpane.arc (bigcircle.x, bigcircle.y, bigcircle.r, 0, math.pi*2, true);
ctxpane.FillStyle = bigCircle.c;
ctxpane.fill ();
ctxpane.closepath ();
if (line
{
line.start = line.start + lineSpeed;
line.end = line.end +linespeed;
ctxpane.beginPath ();
ctxpane.linewidth = 4;
ctxpane.strokestyle = line.c;
ctxpane.arc (line.x, line.y, line.r, line.start, line.end, false);
ctxpane.stroke ();
ctxpane.closepath ();
}
if (line
{
line.start = line.start - linespeed;
line.end = line.end -linespeed;
ctxpane.beginPath ();
ctxpane.linewidth = 4;
ctxpane.strokestyle = line.c;
ctxpane.arc (line.x, line.y, line.r, line.start, line.end, false);
ctxpane.stroke ();
ctxpane.closepath ();
}
dot.x = bigcircle.r*math.cos (line.start+math.pi/32) // Tracking Point
dot.y = bigcircle.r*math.sin (line.start+math.pi/32)
Ctxpane.BeginPath (); // Online -Tracking -Punkt
ctxpane.arc (dot.x, dot.y, dot.r, 0, math.pi*2, true);
ctxpane.fillStyle = smallcircle.c;
ctxpane.fill ();
ctxpane.closepath ();
smallcircledirection (); // smallcircledirection (); //
ctxpane.save ();
ctxpane.beginPath ();
ctxpane.arc (smallcircle.x, smallcircle.y, smallcircle.r, 0, math.pi*2, true);
ctxpane.fillStyle = smallcircle.c;
ctxpane.fill ();
ctxpane.closepath ();
ctxpane.restore ();
}
} // Hauptfunktion
///////////////////////////////////////////
tapme ();
var Timer;
Funktion startGame () {// Starten Sie das Spiel
if (ifingame == 0)
{
ifingame = 1;
Klasse = 0;
var xx = math.floor (math.random ()*8);
/* Switch (xx)
{
Fall 0:
smallcircle.direction = sayirection.shang;
brechen;
Fall 1:
smallcircle.direction = sayirection.xia;
brechen;
Fall 2:
smallcircle.direction = sayirection.zuo;
brechen;
Fall 3:
smallcircle.direction = sayirection.you;
brechen;
Fall 4:
smallcircle.direction = sayirection.zuoSHang;
brechen;
Fall 5:
smallcircle.direction = sayirection.zuoxia;
brechen;
Fall 6:
smallcircle.direction = sayirection.yousHang;
brechen;
Fall 7:
smallcircle.direction = sayirection.youxia;
brechen;
Standard:
brechen;
}*/
smallcircle.direction = sayirection.xia;
smallcircle.x = smallcircle.y = 0;
line.start = math.pi/2-math.pi/26;
line.end = math.pi/2+math.pi/26;
line.direction = sayirection.anticlock;
ClearInterval (Timer);
timer = setInterval (movestest, 10);
}
} // Starten Sie das Spiel StartGame ()
Funktion opentop ()
{
window.location = "http://pongotop.sinaapp.com";
}
10. am Ende geschrieben
Dies ist rein Selbstverständlichkeit. Am dritten Tag nach dem Schreiben war ich damit beschäftigt, Lebensläufe einzureichen, um ein Praktikum zu finden, und ich hatte keine Zeit, mich darum zu kümmern. Ich warf es in meinen Freundeskreis, damit meine Freunde spielen konnten. Dieser Monat ist vergangen und ich schaue mir dieses Spiel wieder an. Ich habe das Gefühl, dass es nicht einfach so sterben sollte. Ich habe keine Fähigkeiten und mache es sehr gut. Daher hoffe ich, dass dieser Artikel einigen Freunden helfen kann, die sich für Pongo interessieren. Außerdem hoffe ich, dass ein Experte auf diesem Gebiet mir Ratschläge geben kann, wenn er es sieht, mich begrüßt, eine Nachricht für alle Zweifel und Ratschläge zu hinterlassen. Danke schön!