1. บทนำสู่พื้นหลังของเกม (ไร้สาระเขียนไว้ด้านหน้า):
วันหนึ่งในช่วงต้นเดือนพฤษภาคมฉันเห็นเว็บไซต์บางแห่งแนะนำเกมนี้ Pongo ฉันดูดีมากและลองใช้กับ iPad หลังจากเล่นสองเกมฉันรู้สึกว่ามันเป็นสิ่งที่ดีและมันก็ค่อนข้างน่าพอใจเพราะมันเป็นเกมที่เป็นประเภทของมือที่เป็นหนี้ ทุกคนรู้
แต่หลังจากนั้นไม่นานฉันก็พบว่าเกมดูเหมือนจะมีข้อบกพร่องบางอย่างบน iPad ฉันจะติดขัดหลังจากเล่นสักพักและฉันก็สามารถบังคับให้ล่าถอยได้ มันทำให้ปวดใจจริงๆและบันทึกก็ยังรอที่จะแตก
จะทำอย่างไร? ความคิดที่ว่ามันจะดีกว่าที่จะเล่นเกมมากกว่าการเล่นเกมของคุณเองก็ดูดีขึ้นอีกครั้งจากนั้นฉันก็โยนแผ่นให้กับเพื่อนของฉัน ฉันกลับไปที่คอมพิวเตอร์อย่างเงียบ ๆ และเริ่มเขียนสิ่งที่ฉันไม่สามารถติดได้
ใช้เวลาประมาณสองชั่วโมงในการเขียนกรอบพื้นฐานแล้วโยนมันลงใน Sinaapp แล้วลอง มันเป็นการเล่นที่ดีที่สุดจากนั้นอาบน้ำและเข้านอน
เมื่อฉันตื่นขึ้นมาในวันถัดไปฉันใช้เวลาออกแบบอินเทอร์เฟซเพราะฉันไม่มีอะไรทำในช่วงสุดสัปดาห์ น่าเสียดายที่ฉันพบข้อบกพร่องที่ร้ายแรงบางอย่างด้วยตัวเองและในที่สุดก็ใช้เวลาพอสมควรในการแก้ไข
ในที่สุดเกมดังกล่าวชื่อ "Pongo+" (คลิกที่ฉันเพื่อเล่นบนโทรศัพท์มือถือ) คอมพิวเตอร์ไม่ได้รับการสนับสนุนในขณะนี้ โดยวิธีการที่ซอร์สโค้ดถูกอัปโหลดบน GitHub และโมดูลคะแนนการส่งจะถูกลบออก
2. เว็บไซต์ทดลองเกม:
Pongo+ (มือถือเท่านั้น): http://mypongo.sinaapp.com/
GitHub Open Source (Fork ยินดีที่จะทำให้เกมดีขึ้น): https://github.com/chenreason/pongo/blob/gh-pages/index.html
3. กฎเกมและการเล่นเกม:
การคลิกบนหน้าจอจะเปลี่ยนทิศทางของการเคลื่อนไหวของฝา การคลิกที่ขอบจะเปลี่ยนทิศทางของกรอบหนึ่งครั้งโดยมีจุดประสงค์เพียงแค่ปิดกั้นลูกบอลเล็ก ๆ ที่กลิ้งไปมาและป้องกันไม่ให้พวกเขาหมดวงกลมใหญ่ ยิ่งเวลานานขึ้น! ในที่สุดคุณสามารถส่งคะแนนของคุณเองสำหรับการจัดอันดับ!
4. เทคโนโลยีที่ใช้ในเกม:
HTML, CSS, JavaScript, Canvas, PHP
5. แนวคิดการออกแบบเกม:
a) ใช้ผ้าใบเพื่อวาดอินเทอร์เฟซหลักของเกม ด้านล่างเป็นรูปสี่เหลี่ยมผืนผ้าขาวดำปกคลุมด้วยวงกลมขนาดใหญ่และวงกลมเล็ก ๆ และแผ่นกั้นจะถูกวาดบนวงกลมขนาดใหญ่ นอกจากนี้ยังมีวงกลมขนาดเล็กสุด ๆ ที่มีขนาด 1px ตรงกลางของแผ่นกั้น (สำหรับการตรวจจับการชน)
b) มี 8 ทิศทางของการเคลื่อนที่ของวงกลมขนาดเล็ก: บน, ล่าง, ซ้าย, ซ้าย, ขวา, ซ้ายบน, ซ้ายล่างซ้าย, ขวาบนและล่างขวา
C) มีเพียงสองทิศทางของการเคลื่อนไหวของแผ่นกั้นตามเข็มนาฬิกาและทวนเข็มนาฬิกา
D) การตรวจจับการชนไม่ได้เกี่ยวข้องกับการใช้เครื่องยนต์ แต่ทำให้การตัดสินระยะทางตามวงกลมเล็ก ๆ และวงกลมซูเปอร์วงกลมตรงกลางของแผ่นกั้นจึงสามารถตรวจจับการชนกันได้อย่างง่าย
e) ทิศทางของการรีบาวด์หลังจากการชนกันของลูกบอลถูกกำหนดและความรู้ทั่วไปจะใช้ในการแสดงรายการและมี 8 สถานการณ์ทั้งหมด
6. ความยากลำบากในการใช้งานเกม:
a) การตรวจจับการชน
b) กำหนดเวลาการกวาดล้าง SetInterval และไม่ว่าจะชัดเจนและละเอียดถี่ถ้วนหรือไม่
c) ความสัมพันธ์ระหว่างความยาวของวัฏจักรตัวจับเวลาและประสบการณ์การเล่นเกม
D) ปัญหาความคล่องแคล่วของเกมที่เกิดจากประสิทธิภาพที่แตกต่างกันของอุปกรณ์ Android และ iOS
7. ปัญหาที่มีอยู่เกี่ยวกับเกม:
A) เนื่องจากการตรวจจับการชนกันคือการเปรียบเทียบระยะห่างจากจุดศูนย์กลางระหว่างสองวงกลมและเกี่ยวข้องกับการใช้ตัวจับเวลาเนื่องจากช่วงเวลาที่สั้นมากการชนกันหลายสิบครั้งเกิดขึ้นจริงหลังการชนที่มองเห็นด้วยตาเปล่า สิ่งนี้จะทำให้ทิศทางการรีบาวด์ที่แท้จริงของลูกบอลแตกต่างจากทฤษฎีบททางกายภาพจริง หลังจากการปรับให้เหมาะสมความน่าจะเป็นของการเกิดขึ้นต่ำ แต่ก็ไม่ได้รับการหลีกเลี่ยง ดังนั้นผู้เล่นบางคนจะพบว่าหากวงกลมไม่ได้กระทบกึ่งกลางของแผ่นกั้นอย่างถูกต้องอาจทำให้เกมล้มเหลว
b) เนื่องจากฟังก์ชั่นนั้นมีความรุนแรงเกินไปประสิทธิภาพต่ำและการใช้ตัวจับเวลาประสบการณ์การเล่นเกมบน Android นั้นแตกต่างจาก iOS หรืออุปกรณ์มือถืออื่น ๆ (โดยทั่วไปแล้ว iOS เป็นเพราะ Android)
c) รายการอันดับไม่ได้รับการอัปเดตแบบเรียลไทม์อัตโนมัติ (ยังไม่ใช้ฐานข้อมูล)
8. เกมอินเทอร์เฟซเกม:
(รูปที่ 1 เป็นรุ่นแรกรูปที่ 2 ได้ลบปุ่มรูปที่ 3 เป็นรุ่นสุดท้ายและรูปที่ 4 คือรายการอันดับ)
รูปที่ 1
รูปที่ 2
รูปที่ 3
9. ส่วนหนึ่งของซอร์สโค้ดของเกม JavaScript:
การคัดลอกรหัสมีดังนี้:
var ifingame = 0;
var maxGrade = 0, grade = 0;
VAR เกรด 1, เกรด 2;
ชื่อเล่น var;
var gamespeed = 1.4; // ความเร็วบอล
var linespeed = math.pi/95; // ความเร็วในการติดตาม
var crashdistanceFaild = -7; // พารามิเตอร์การตรวจจับการชนกัน
var crashdistancesucc = 15
var fantanjuli = 7;
var ThemaxGradeline = 12.1;
ฟังก์ชั่น getCookie1 (ชื่อเล่น)
-
if (document.cookie.length> 0)
-
c_start = document.cookie.indexof (ชื่อเล่น + "=")
ถ้า (c_start! =-1)
-
c_start = c_start + ชื่อเล่นความยาว + 1;
c_end = document.cookie.indexof (",", c_start);
ถ้า (c_end ==-1)
c_end = document.cookie.length;
ส่งคืน Unsescape (document.cookie.substring (c_start, c_end));
-
-
กลับ ""
-
ฟังก์ชั่น getCookie2 (myMaxGrade)
-
if (document.cookie.length> 0)
-
c_start = document.cookie.indexof (mymaxgrade + "=")
ถ้า (c_start! =-1)
-
c_start = c_start + mymaxgrade.length + 1;
c_end = document.cookie.indexof (";", c_start);
ถ้า (c_end ==-1)
c_end = document.cookie.length;
ส่งคืน Unsescape (document.cookie.substring (c_start, c_end));
-
-
กลับ ""
-
ฟังก์ชั่น SetCookie (ชื่อเล่น, ค่า, MyMaxGrade, MaxGrade, Expiredays)
-
var exdate = วันที่ใหม่ ()
exdate.setDate (exdate.getDate ()+Expiredays)
document.cookie = ชื่อเล่น + "=" + escape (value) + "," + mymaxgrade + "=" + escape (maxgrade) + ((expiredays == null)? "": "; expires =" + exdate.togmtstring ());
-
checkcookie ()
-
ชื่อเล่น = getCookie1 ('ชื่อเล่น');
maxGrade = parseInt (getCookie2 ('myMaxGrade'));
if (isnan (maxgrade) == true)
-
MaxGrade = 0;
-
if (ชื่อเล่น! = null && ชื่อเล่น! = "")
-
การแจ้งเตือน ('ยินดีต้อนรับ'+ชื่อเล่น+'back!'+'/n'+"ถ้าคุณชอบโปรดแบ่งปัน ~");
-
อื่น
-
ชื่อเล่น = พรอมต์ ('โปรดป้อนชื่อเล่นของคุณ: (ชื่อยาวเกินไปและจะแสดงไม่สมบูรณ์)', "")
if (ชื่อเล่น! = null && ชื่อเล่น! = "")
-
var maxGradestring = maxGrade.toString ();
SetCookie ('ชื่อเล่น', ชื่อเล่น, 'MyMaxGrade', MaxGradestring, 365);
-
-
-
var objpane = document.getElementById ("บานหน้าต่าง");
var ctxpane = objpane.getContext ("2d");
ctxpane.translate (150,150); // การแปลจุดศูนย์ผ้าใบที่ต้องการ
ฟังก์ชั่น sendmail ()
-
ถ้า (เกรด 2> TheMaxGradeline)
var max_grade = เกรด 2;
window.location.href = 'index.php? max_grade ='+max_grade+'& nick_name ='+ชื่อเล่น;
-
<? php
$ grade = $ _ get ['max_grade'];
$ nickname = $ _ get ['nick_name'];
$ mail = new Saemail ();
$ ret = $ mail-> quicksend ('[email protected]', $ grade, $ nickname, '[email protected]', 'mypongo');
$ mail-> clean ();
-
-
การแจ้งเตือน (ชื่อเล่น+"เกรดของคุณคือ:"+เกรด 2+"ส่งสำเร็จ ~");
-
var gamedirection = {
Shang: 1,
Xia: 5,
Zuo: 7,
คุณ: 3,
Zuoshang: 8,
Zuoxia: 6,
Youshang: 2,
Youxia: 4,
นาฬิกา: 0,
Anticlock: 9,
};//ทิศทาง
var canvas = {
ความกว้าง: 300
ความสูง: 300,
};//ผ้าใบ
var bigcircle = {// พารามิเตอร์วงกลมใหญ่
X: 0, // ค่าพิกัด X-Axis ของศูนย์กลางของวงกลม
y: 0, // ค่าพิกัดแกน y ของศูนย์กลางของวงกลม
R: 150, // รัศมีของวงกลม
C: 'RGB (255,255,255)'
}; // dayuan
var smallcircle = {// พารามิเตอร์ smallcircle
X: 0, // ค่าพิกัด X-Axis ของศูนย์กลางของวงกลม
y: 0, // ค่าพิกัดแกน y ของศูนย์กลางของวงกลม
R: 12, // รัศมีของวงกลม
C: 'RGB (204,105,106)'
ทิศทาง: gamedirection.xia,
}; // วงกลมเล็ก
var line = {// พารามิเตอร์ของเส้น baffle
X: 0, // ค่าพิกัด X-Axis ของศูนย์กลางของวงกลม
y: 0, // ค่าพิกัดแกน y ของศูนย์กลางของวงกลม
R: 150, // รัศมีของส่วนโค้ง
เริ่มต้น: (math.pi/2-math.pi/16)
สิ้นสุด: (math.pi/2+math.pi/16)
C: 'RGB (55,55,55)'
ทิศทาง: gamedirection.anticlock,
}; // สายติดตาม
var dot = {// พารามิเตอร์จุดติดตาม
x: (bigcircle.r*math.cos (line.start+math.pi/16)), // ใช้วงกลมขนาดใหญ่เป็นจุดเริ่มต้น
y: (bigcircle.r*math.sin (line.start+math.pi/16),
r: 1,
} // จุดติดตาม
ฟังก์ชั่น changelinedirection ()
-
if (line.direction == gamedirection.clock)
-
line.direction = gamedirection.anticlock;
-
อื่น
-
line.direction = gamedirection.clock;
-
-
ฟังก์ชั่น getDistance () {
ระยะ var = math.sqrt ((smallcircle.x)*(smallcircle.x)+(smallcircle.y)*(smallcircle.y));
ระยะทางกลับ;
} // กลับไปที่ระยะสี่เหลี่ยมจัตุรัสระหว่างลูกบอลขนาดเล็กและศูนย์กลางวงกลมขนาดใหญ่ getdistance ()
ฟังก์ชั่น ifgameover () {// ตัดสินว่ามันอยู่นอกขอบเขตหรือไม่
if ((getDistance () - bigcircle.r)> 5)
กลับมาจริง;
อื่น
กลับเท็จ;
} // ตัดสินว่าเกมสิ้นสุด ifgameover ()
ฟังก์ชั่น ifcrash () {// การตรวจจับการชนกัน
var dx = dot.x-smallcircle.x;
var dy = dot.y-smallcircle.y;
var dd = math.sqrt (dx*dx+dy*dy);
if (dd <crashdistancesucc)
กลับมาจริง;
อื่น
กลับเท็จ;
} // การตรวจจับการชน Ifcrash ()
ฟังก์ชั่นสุ่มกลับ ()
-
var x = math.floor (math.random ()*3);
สวิตช์ (smallcircle.direction) {
case gamedirection.shang:
-
สวิตช์ (x)
-
กรณี 0:
smallcircle.direction = gamedirection.xia;
smallcircle.y = smallcircle.y+fantanjuli;
หยุดพัก;
กรณีที่ 1:
smallcircle.direction = gamedirection.zuoxia;
smallcircle.x = smallcircle.x-fantanjuli;
smallcircle.y = smallcircle.y+fantanjuli;
หยุดพัก;
กรณีที่ 2:
smallcircle.direction = gamedirection.youxia;
smallcircle.x = smallcircle.x+fantanjuli;
smallcircle.y = smallcircle.y+fantanjuli;
หยุดพัก;
ค่าเริ่มต้น:
หยุดพัก;
}หยุดพัก;
-
case gamedirection.xia:
-
สวิตช์ (x)
-
กรณี 0:
smallcircle.direction = gamedirection.shang;
smallcircle.y = smallcircle.y-fantanjuli;
หยุดพัก;
กรณีที่ 1:
smallcircle.direction = gamedirection.zuoshang;
smallcircle.x = smallcircle.x-fantanjuli;
smallcircle.y = smallcircle.y-fantanjuli;
หยุดพัก;
กรณีที่ 2:
smallcircle.direction = gamedirection.youshang;
smallcircle.x = smallcircle.x+fantanjuli;
smallcircle.y = smallcircle.y-fantanjuli;
หยุดพัก;
ค่าเริ่มต้น:
หยุดพัก;
}หยุดพัก;
-
case gamedirection.zuo:
-
สวิตช์ (x)
-
กรณี 0:
smallcircle.direction = gamedirection.you;
smallcircle.x = smallcircle.x+fantanjuli;
หยุดพัก;
กรณีที่ 1:
smallcircle.direction = gamedirection.youshang;
smallcircle.x = smallcircle.x+fantanjuli;
smallcircle.y = smallcircle.y-fantanjuli;
หยุดพัก;
กรณีที่ 2:
smallcircle.direction = gamedirection.youxia;
smallcircle.x = smallcircle.x+fantanjuli;
smallcircle.y = smallcircle.y+fantanjuli;
หยุดพัก;
ค่าเริ่มต้น:
หยุดพัก;
}หยุดพัก;
-
case gamedirection.you:
-
สวิตช์ (x)
-
กรณี 0:
smallcircle.direction = gamedirection.zuo;
smallcircle.x = smallcircle.x-fantanjuli;
หยุดพัก;
กรณีที่ 1:
smallcircle.direction = gamedirection.zuoxia;
smallcircle.x = smallcircle.x-fantanjuli;
smallcircle.y = smallcircle.y+fantanjuli;
หยุดพัก;
กรณีที่ 2:
smallcircle.direction = gamedirection.zuoshang;
smallcircle.x = smallcircle.x-fantanjuli;
smallcircle.y = smallcircle.y-fantanjuli;
หยุดพัก;
ค่าเริ่มต้น:
หยุดพัก;
}หยุดพัก;
-
case gamedirection.zuoshang:
-
สวิตช์ (x)
-
กรณี 0:
smallcircle.direction = gamedirection.youxia;
smallcircle.x = smallcircle.x+fantanjuli;
smallcircle.y = smallcircle.y+fantanjuli;
หยุดพัก;
กรณีที่ 1:
smallcircle.direction = gamedirection.xia;
smallcircle.y = smallcircle.y+fantanjuli;
หยุดพัก;
กรณีที่ 2:
smallcircle.direction = gamedirection.you;
smallcircle.x = smallcircle.x+fantanjuli;
หยุดพัก;
ค่าเริ่มต้น:
หยุดพัก;
}หยุดพัก;
-
case gamedirection.zuoxia:
-
สวิตช์ (x)
-
กรณี 0:
smallcircle.direction = gamedirection.youshang;
smallcircle.x = smallcircle.x+fantanjuli;
smallcircle.y = smallcircle.y-fantanjuli;
หยุดพัก;
กรณีที่ 1:
smallcircle.direction = gamedirection.shang;
smallcircle.y = smallcircle.y-fantanjuli;
หยุดพัก;
กรณีที่ 2:
smallcircle.direction = gamedirection.you;
smallcircle.x = smallcircle.x+fantanjuli;
หยุดพัก;
ค่าเริ่มต้น:
หยุดพัก;
}หยุดพัก;
-
case gamedirection.youshang:
-
สวิตช์ (x)
-
กรณี 0:
smallcircle.direction = gamedirection.zuoxia;
smallcircle.x = smallcircle.x-fantanjuli;
smallcircle.y = smallcircle.y+fantanjuli;
หยุดพัก;
กรณีที่ 1:
smallcircle.direction = gamedirection.zuo;
smallcircle.x = smallcircle.x-fantanjuli;
หยุดพัก;
กรณีที่ 2:
smallcircle.direction = gamedirection.xia;
smallcircle.y = smallcircle.y+fantanjuli;
หยุดพัก;
ค่าเริ่มต้น:
หยุดพัก;
}หยุดพัก;
-
case gamedirection.youxia:
-
สวิตช์ (x)
-
กรณี 0:
smallcircle.direction = gamedirection.zuoshang;
smallcircle.x = smallcircle.x-fantanjuli;
smallcircle.y = smallcircle.y-fantanjuli;
หยุดพัก;
กรณีที่ 1:
smallcircle.direction = gamedirection.zuo;
smallcircle.x = smallcircle.x-fantanjuli;
หยุดพัก;
กรณีที่ 2:
smallcircle.direction = gamedirection.shang;
smallcircle.y = smallcircle.y-fantanjuli;
หยุดพัก;
ค่าเริ่มต้น:
หยุดพัก;
}หยุดพัก;
-
ค่าเริ่มต้น:
-
หยุดพัก;
-
-
} // ลูกบอลแบบสุ่มกลับแบบสุ่มกลับ ()
ฟังก์ชั่น smallcircledirection ()
-
สวิตช์ (smallcircle.direction) {// ย้ายตามทิศทางของลูกบอล
case gamedirection.shang:
-
smallcircle.y = smallcircle.y-gamespeed;
เกรด ++;
ถ้า (เกรด> MaxGrade)
-
MaxGrade = เกรด;
newRecoder ();
-
addone ();
หยุดพัก;
-
case gamedirection.xia:
-
smallcircle.y = smallcircle.y+gamespeed;
เกรด ++;
ถ้า (เกรด> MaxGrade)
-
MaxGrade = เกรด;
newRecoder ();
-
addone ();
หยุดพัก;
-
case gamedirection.zuo:
-
smallcircle.x = smallcircle.x-gamespeed;
เกรด ++;
ถ้า (เกรด> MaxGrade)
-
MaxGrade = เกรด;
newRecoder ();
-
addone ();
หยุดพัก;
-
case gamedirection.you:
-
smallcircle.x = smallcircle.x+gameSpeed;
เกรด ++;
ถ้า (เกรด> MaxGrade)
-
MaxGrade = เกรด;
newRecoder ();
-
addone ();
หยุดพัก;
-
case gamedirection.zuoshang:
-
smallcircle.x = smallcircle.x-gamespeed*0.8;
smallcircle.y = smallcircle.y-gamespeed*0.8;
เกรด ++;
ถ้า (เกรด> MaxGrade)
-
MaxGrade = เกรด;
newRecoder ();
-
addone ();
หยุดพัก;
-
case gamedirection.zuoxia:
-
smallcircle.x = smallcircle.x-gamespeed*0.8;
smallcircle.y = smallcircle.y+gamespeed*0.8;
เกรด ++;
ถ้า (เกรด> MaxGrade)
-
MaxGrade = เกรด;
newRecoder ();
-
addone ();
หยุดพัก;
-
case gamedirection.youshang:
-
smallcircle.x = smallcircle.x+gamespeed*0.8;
smallcircle.y = smallcircle.y-gamespeed*0.8;
เกรด ++;
ถ้า (เกรด> MaxGrade)
-
MaxGrade = เกรด;
newRecoder ();
-
addone ();
หยุดพัก;
-
case gamedirection.youxia:
-
smallcircle.x = smallcircle.x+gamespeed*0.8;
smallcircle.y = smallcircle.y+gamespeed*0.8;
เกรด ++;
ถ้า (เกรด> MaxGrade)
-
MaxGrade = เกรด;
newRecoder ();
-
addone ();
หยุดพัก;
-
ค่าเริ่มต้น:
-
หยุดพัก;
-
-
} // ลูกบอลเคลื่อนที่ smallcircledirection ()
/*วาดวงกลมด้านล่าง*/
ctxpane.beginpath (); // dayuan
ctxpane.arc (bigcircle.x, bigcircle.y, bigcircle.r, 0, math.pi*2, true);
ctxpane.fillstyle = bigcircle.c;
ctxpane.fill ();
ctxpane.closepath ();
/*วาดเส้นติดตามด้านล่าง*/
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 ();
ฟังก์ชั่น tapme () // tapme
-
ctxpane.beginpath ();
ctxpane.strokestyle = "RGB (255,222,195)";
ctxpane.font = "80px papyrus";
ctxpane.stroketext ('แตะ',-95,30);
CTXPANE.FILLSTYLE = "RGB (255,205,105)";
ctxpane.font = "35px papyrus";
ctxpane.filltext ('me', 70,30);
ctxpane.closepath ();
-
ฟังก์ชั่น newRecoder ()
-
ctxpane.beginpath ();
ctxpane.fillstyle = "RGB (255,0,0)";
ctxpane.font = "18px papyrus";
ctxpane.filltext ("ใหม่!", 58,80);
ctxpane.closepath ();
-
ฟังก์ชัน Addone ()
-
เกรด 1 = (เกรด/150) .tofixed (1);
เกรด 2 = (MaxGrade/150) .tofixed (1);
var says1 = "ตอนนี้";
var says2 = "ดีที่สุด"
ctxpane.beginpath ();
ctxpane.strokestyle = "RGB (250,222,185)";
ctxpane.font = "60px papyrus";
ctxpane.stroketext (เกรด 1, -45, -60);
ctxpane.stroketext (เกรด 2, -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 ();
-
ฟังก์ชั่น movetest () {
if (ifgameover ())
-
ifingame = 0;
if (maxgrade> parseint (getCookie2 ('myMaxGrade')))))
-
SetCookie ('ชื่อเล่น', ชื่อเล่น, 'MyMaxGrade', MaxGrade.ToString (), 365);
-
ClearInterval (ตัวจับเวลา);
tapme ();
-
อื่น
-
ถ้า (ifcrash ())
-
Randomback ();
-
ctxpane.clearrect (-150, -150,300,300); // ล้างหน้าจอ
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.direction == gamedirection.clock) // การติดตามบรรทัดตามเข็มนาฬิกาตามเข็มนาฬิกาตามเข็มนาฬิกาตามเข็มนาฬิกา
-
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.direction == gamedirection.anticlock) // การติดตามทวนเข็มนาฬิกา
-
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) // จุดติดตาม
dot.y = bigcircle.r*math.sin (line.start+math.pi/32)
ctxpane.beginpath (); // จุดติดตามออนไลน์
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 ();
-
} // ฟังก์ชั่นหลัก
-
tapme ();
ตัวจับเวลา var;
function startgame () {// เริ่มเกม
if (ifingame == 0)
-
ifingame = 1;
เกรด = 0;
var xx = math.floor (math.random ()*8);
/* สวิตช์ (xx)
-
กรณี 0:
smallcircle.direction = gamedirection.shang;
หยุดพัก;
กรณีที่ 1:
smallcircle.direction = gamedirection.xia;
หยุดพัก;
กรณีที่ 2:
smallcircle.direction = gamedirection.zuo;
หยุดพัก;
กรณีที่ 3:
smallcircle.direction = gamedirection.you;
หยุดพัก;
กรณีที่ 4:
smallcircle.direction = gamedirection.zuoshang;
หยุดพัก;
กรณีที่ 5:
smallcircle.direction = gamedirection.zuoxia;
หยุดพัก;
กรณีที่ 6:
smallcircle.direction = gamedirection.youshang;
หยุดพัก;
กรณีที่ 7:
smallcircle.direction = gamedirection.youxia;
หยุดพัก;
ค่าเริ่มต้น:
หยุดพัก;
-
smallcircle.direction = gamedirection.xia;
smallcircle.x = smallcircle.y = 0;
line.start = math.pi/2-math.pi/26;
line.end = math.pi/2+math.pi/26;
line.direction = gamedirection.anticlock;
ClearInterval (ตัวจับเวลา);
timer = setInterval (movtest, 10);
-
} // เริ่มเกม startgame ()
ฟังก์ชั่น opentop ()
-
window.location = "http://pongotop.sinaapp.com";
-
10. เขียนในตอนท้าย
นี่คือความบันเทิงตนเองอย่างหมดจด ในวันที่สามหลังจากการเขียนฉันกำลังยุ่งอยู่กับการส่งประวัติย่อเพื่อค้นหาการฝึกงานและฉันไม่มีเวลาดูแลมัน ฉันโยนมันเข้าไปในแวดวงเพื่อนเพื่อให้เพื่อนเล่น เดือนนี้ผ่านไปแล้วและฉันดูเกมนี้อีกครั้ง ฉันรู้สึกว่ามันไม่ควรตายเช่นนี้ ฉันไม่มีทักษะใด ๆ และทำได้ดีมาก ดังนั้นฉันหวังว่าบทความนี้จะช่วยเพื่อนบางคนที่สนใจ Pongo นอกจากนี้ฉันหวังว่าหากผู้เชี่ยวชาญใด ๆ ในสาขานี้สามารถให้คำแนะนำฉันได้ถ้าเขาเห็นมันเขายินดีต้อนรับฉันที่จะฝากข้อความไว้สำหรับข้อสงสัยและคำแนะนำทั้งหมด ขอบคุณ!