1. مقدمة لخلفية اللعبة (هراء مكتوب في المقدمة):
في يوم من الأيام في أوائل مايو ، رأيت موقعًا معينًا يوصي بهذه اللعبة ، Pongo. لقد بدت جيدة وجربتها مع iPad. بعد لعب مباراتين ، شعرت أنه كان شيئًا جيدًا ، وكان الأمر مرضيًا للغاية ، لأنها كانت لعبة كانت نوعًا من اليد المستحقة. الجميع يعرف ذلك.
ولكن بعد فترة من الوقت ، وجدت أن اللعبة يبدو أن لديها بعض الأخطاء على iPad. كنت أتعثر بعد اللعب لفترة من الوقت ولم أستطع إجباره على التراجع إلا. كان الأمر مفجعًا حقًا ، وكان السجل لا يزال ينتظر كسره.
ما يجب القيام به؟ كانت فكرة أنه من الأفضل ممارسة الألعاب من لعب ألعابك الخاصة ، ظهرت مرة أخرى ، ثم ألقيت الوسادة على مفجعة صديقي. عدت بصمت إلى الكمبيوتر وبدأت في كتابة شيء لم أتمكن من التعثر.
استغرق الأمر حوالي ساعتين لكتابة الإطار الأساسي ، ثم ألقاه في سيناب وجربته. لقد كان الأفضل في الأساس للعب ثم الاستحمام والذهاب إلى الفراش.
عندما استيقظت في اليوم التالي ، قضيت بعض الوقت في تصميم الواجهة لأنه لم يكن لدي ما أفعله في عطلة نهاية الأسبوع. لسوء الحظ ، وجدت بعض الأخطاء الخطيرة بنفسي ، وأخيراً استغرقت بعض الوقت لتصحيحها.
أخيرًا ، تم تسمية اللعبة "Pongo+" (انقر علىي للعب على الهواتف المحمولة). الكمبيوتر غير مدعوم في الوقت الحالي. بالمناسبة ، تم تحميل رمز المصدر على Github وتمت إزالة وحدة نقاط التقديم.
2. موقع تجربة اللعبة:
Pongo+ (Mobile Only): 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. أفكار تصميم اللعبة:
أ) استخدام قماش لرسم الواجهة الرئيسية للعبة. الجزء السفلي عبارة عن مستطيل أحادي اللون ، مغطى بدائرة كبيرة ، ودائرة صغيرة وحبيبة يتم رسمها على الدائرة الكبيرة. هناك أيضًا دائرة صغيرة فائقة بحجم 1 بكسل في منتصف الحاجز (للكشف عن التصادم).
ب) هناك 8 اتجاهات لحركة الدوائر الصغيرة: الجزء العلوي ، السفلي ، اليسار ، اليمين ، اليسار العلوي ، أسفل اليسار ، الجزء العلوي الأيمن والسفلي اليمين.
ج) لا يوجد سوى اتجاهين لحركة الحرس ، في اتجاه عقارب الساعة وعكس اتجاه عقارب الساعة.
د) لا يتضمن اكتشاف الاصطدام استخدام المحرك ، بل يصدر الحكم على المسافة بناءً على الدائرة الصغيرة والدائرة الفائقة في منتصف الحرس ، وبالتالي تحقيق اكتشاف تصادم بسيط.
هـ) يتم تحديد اتجاه الارتداد بعد تصادم الكرة ، ويتم استخدام المعرفة العامة لإدراجها ، وهناك 8 حالات في المجموع.
6. الصعوبات في تنفيذ اللعبة:
أ) اكتشاف الاصطدام.
ب) توقيت التخليص الموقت الموقت وما إذا كان واضحًا وشاملًا.
ج) العلاقة بين طول دورة المؤقت وتجربة الألعاب.
د) مشاكل الطلاقة في اللعبة الناتجة عن أداء مختلف أجهزة Android و iOS.
7. المشاكل الحالية مع اللعبة:
أ) نظرًا لأن الكشف عن التصادم هو مقارنة مسافة المركز بين دائرتين وتتضمن استخدام أجهزة ضبط الوقت ، بسبب الفاصل الزمني الموقت القصير للغاية ، حدثت عشرات التصادمات بالفعل وراء تصادم تراها العين المجردة. سيؤدي ذلك إلى أن يكون اتجاه الارتداد الفعلي للكرة يختلف عن النظرية المادية الفعلية. بعد التحسين ، يكون احتمال الحدوث منخفضًا ، ولكن لم يتم تجنبه. لذلك ، سيجد بعض اللاعبين أنه إذا لم تصل الدائرة إلى مركز الحاجز بدقة ، فقد يتسبب ذلك في فشل اللعبة.
ب) نظرًا لأن الوظائف تكون مطوّلة للغاية ، منخفضة الكفاءة ، واستخدام أجهزة ضبط الوقت ، فإن تجربة الألعاب على Android تختلف عن iOS أو غيرها من الأجهزة المحمولة (بشكل عام ، iOS بسبب Android).
ج) لم تحقق قائمة الترتيب تحديثات تلقائية في الوقت الفعلي. (لن يتم استخدام قاعدة البيانات بعد)
8. معاينة واجهة اللعبة:
(الشكل 1 هو الإصدار الأول ، قام الشكل 2 بإزالة الزر ، والشكل 3 هو الإصدار النهائي ، والشكل 4 هو قائمة الترتيب)
الشكل 1
الشكل 2
الشكل 3
9. جزء من الكود المصدري للعبة JavaScript:
نسخة الكود كما يلي:
var ifingame = 0 ؛
var maxgrade = 0 ، grade = 0 ؛
VAR GRADE1 ، GRADE2 ؛
var لقب
var gamespeed = 1.4 ؛ // سرعة الكرة
var linepeed = math.pi/95 ؛ // سرعة خط المسار
var crashdistancefaild = -7 ؛ // معلمات اكتشاف الاصطدام
var crashdistancesucc = 15
فار فانتانجولي = 7 ؛
var themaxrangeline = 12.1 ؛
وظيفة getCookie1 (لقب)
{
if (document.cookie.length> 0)
{
c_start = document.cookie.indexof (لقب + "=")
إذا (c_start! =-1)
{
c_start = c_start + nablem.length + 1 ؛
c_end = document.cookie.indexof ("،" ، c_start) ؛
إذا (c_end ==-1)
c_end = document.cookie.length ؛
return unescape (document.cookie.substring (C_Start ، C_end)) ؛
}
}
يعود ""
}
وظيفة getCookie2 (myMaxrghers)
{
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 ؛
return unescape (document.cookie.substring (C_Start ، C_end)) ؛
}
}
يعود ""
}
وظيفة setCookie (لقب ، القيمة ، mymaxrghers ، maxgrade ، expiredays)
{
var exdate = تاريخ جديد ()
exdate.setdate (exdate.getDate ()+Expiredays)
document.cookie = lamname + "=" + Escape (value) + "،" + myMaxgrade + "=" + Escape (MaxGrade) + ((Expiredays == null)؟ "":
}
وظيفة CheckCookie ()
{
لقب = getCoOkie1 ('لقب') ؛
MaxGrade = parseint (getCoOkie2 ('mymaxrghers')) ؛
إذا (isnan (MaxGrade) == True)
{
MaxGrade = 0 ؛
}
if (لقب! = null && levers! = "")
{
ALERT ('WELL'+LAJENAME+'Back!'+'/n'+"إذا أعجبك ذلك ، يرجى مشاركته ~") ؛
}
آخر
{
لقب = موجه ('الرجاء إدخال لقبك: (الاسم طويل جدًا وسيتم عرضه غير مكتمل) "،" ")
if (لقب! = null && levers! = "")
{
var maxgradestring = maxgrade.toString () ؛
SetCoookie ("اللقب" ، اللقب ، "MyMaxrghers" ، MaxGradestring ، 365) ؛
}
}
}
var objpane = document.getElementById ("pane") ؛
var ctxpane = objpane.getContext ("2d") ؛
ctxpane.translate (150،150) ؛ // ترجمة نقطة Canvas Center Point
وظيفة sendmail ()
{
if (grade2> themaxgradeline)
var max_grade = day2 ؛
window.location.href = 'index.php؟ max_grade ='+max_grade+'& nick_name ='+lamname ؛
/* {
<؟ PHP
$ grade = $ _ get ['max_grade'] ؛
$ QUNELAME = $ _ get ['nick_name'] ؛
$ mail = new saemail () ؛
$ ret = $ mail-> QuickSend ('[email protected]' ، $ grade ، $ lamname ، '[email protected]' ، 'mypongo') ؛
$ mail-> clean () ؛
؟>
}*/
ALERT (لقب+"الدرجة الخاصة بك هو:"+drene2+"تم تقديمه بنجاح ~") ؛
}
var gamedirection = {
شانغ: 1 ،
شيا: 5 ،
زو: 7 ،
أنت: 3 ،
Zuoshang: 8 ،
Zuoxia: 6 ،
Youshang: 2 ،
youxia: 4 ،
الساعة: 0 ،
anticlock: 9 ،
}؛//اتجاه
var canvas = {
العرض: 300 ،
الارتفاع: 300 ،
} ؛ // قماش
var bigcircle = {// معلمة دائرة كبيرة
x: 0 ، // قيمة إحداثيات المحور السيني لمركز الدائرة
y: 0 ، // قيمة إحداثي المحور y لمركز الدائرة
R: 150 ، // نصف قطر الدائرة
C: 'RGB (255،255،255)' ،
} ؛ // dayuan
var smallCircle = {// smallCircle Parameter
x: 0 ، // قيمة إحداثيات المحور السيني لمركز الدائرة
y: 0 ، // قيمة إحداثي المحور y لمركز الدائرة
R: 12 ، // نصف قطر الدائرة
C: 'RGB (204،105،106)' ،
الاتجاه: gamedirection.xia ،
} ؛ // دائرة صغيرة
var line = {// معلمات خط الوفل
x: 0 ، // قيمة إحداثيات المحور السيني لمركز الدائرة
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)) ،
ص: 1 ،
} // نقطة التتبع
وظيفة changelinedirection ()
{
if (line.direction == gamedirection.clock)
{
line.direction = gamedirection.anticlock ؛
}
آخر
{
line.direction = gamedirection.clock ؛
}
}
وظيفة getDistance () {
var distant = math.sqrt ((smallCircle.x)*(smallCircle.x)+(smallCircle.y)*(smallCircle.y)) ؛
عودة المسافة
} // العودة إلى المسافة المربعة بين الكرة الصغيرة ومركز الدائرة الكبيرة getDistance ()
وظيفة ifgameover () {// ugen ما إذا كان خارج الحدود
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) ؛
إذا (dd <crashDistancesuccc)
العودة صحيح.
آخر
العودة كاذبة
} // اكتشاف التصادم IFCRASH ()
وظيفة عشوائية ()
{
var x = math.floor (math.random ()*3) ؛
التبديل (smallCircle.direction) {
حالة 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 ؛
استراحة؛
تقصير:
استراحة؛
}استراحة؛
}
القضية 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 ؛
استراحة؛
تقصير:
استراحة؛
}استراحة؛
}
قضية gamedirection. أنت:
{
التبديل (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 ؛
استراحة؛
تقصير:
استراحة؛
}استراحة؛
}
القضية 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 ؛
استراحة؛
تقصير:
استراحة؛
}استراحة؛
}
حالة 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 ؛
استراحة؛
تقصير:
استراحة؛
}استراحة؛
}
القضية 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 ؛
استراحة؛
تقصير:
استراحة؛
}استراحة؛
}
قضية 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) {// تحرك وفقًا لاتجاه الكرة
حالة gamedirection.shang:
{
smallCircle.y = smallCircle.y-gamespeed ؛
درجة ++ ؛
إذا (الصف> MaxGrade)
{
MaxGrade = Grade ؛
NewRecoder () ؛
}
addone () ؛
استراحة؛
}
Case gamedirection.xia:
{
smallCircle.y = smallCircle.y+GameSpeed ؛
درجة ++ ؛
إذا (الصف> MaxGrade)
{
MaxGrade = Grade ؛
NewRecoder () ؛
}
addone () ؛
استراحة؛
}
القضية gamedirection.zuo:
{
smallCircle.x = smallCircle.x-gamespeed ؛
درجة ++ ؛
إذا (الصف> MaxGrade)
{
MaxGrade = Grade ؛
NewRecoder () ؛
}
addone () ؛
استراحة؛
}
قضية gamedirection. أنت:
{
smallCircle.x = smallCircle.x+GameSpeed ؛
درجة ++ ؛
إذا (الصف> MaxGrade)
{
MaxGrade = Grade ؛
NewRecoder () ؛
}
addone () ؛
استراحة؛
}
القضية gamedirection.zuoshang:
{
smallCircle.x = smallCircle.x-gamespeed*0.8 ؛
smallCircle.y = smallCircle.y-gamespeed*0.8 ؛
درجة ++ ؛
إذا (الصف> MaxGrade)
{
MaxGrade = Grade ؛
NewRecoder () ؛
}
addone () ؛
استراحة؛
}
حالة gamedirection.zuoxia:
{
smallCircle.x = smallCircle.x-gamespeed*0.8 ؛
smallCircle.y = smallCircle.y+GamePeed*0.8 ؛
درجة ++ ؛
إذا (الصف> MaxGrade)
{
MaxGrade = Grade ؛
NewRecoder () ؛
}
addone () ؛
استراحة؛
}
القضية gamedirection.youshang:
{
smallCircle.x = smallCircle.x+GameSpeed*0.8 ؛
smallCircle.y = smallCircle.y-gamespeed*0.8 ؛
درجة ++ ؛
إذا (الصف> MaxGrade)
{
MaxGrade = Grade ؛
NewRecoder () ؛
}
addone () ؛
استراحة؛
}
قضية gamedirection.youxia:
{
smallCircle.x = smallCircle.x+GameSpeed*0.8 ؛
smallCircle.y = smallCircle.y+GamePeed*0.8 ؛
درجة ++ ؛
إذا (الصف> MaxGrade)
{
MaxGrade = Grade ؛
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 ('tap' ،-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 ("New!" ، 58،80) ؛
ctxpane.closepath () ؛
}
وظيفة addone ()
{
GRADE1 = (GRADE/150) .Tofixed (1) ؛
GRADE2 = (MaxGrade/150) .Tofixed (1) ؛
var sile1 = "الآن" ؛
var sile2 = "أفضل"
ctxpane.beginpath () ؛
ctxpane.strokestyle = "RGB (250،222،185)" ؛
ctxpane.font = "60px papyrus" ؛
ctxpane.stroketext (Grade1 ، -45 ، -60) ؛
ctxpane.stroketext (Grade2 ، -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 () {
إذا (ifgameover ())
{
ifingame = 0 ؛
if (maxgrade> parseint (getCookie2 ('mymaxrghers')))))
{
setCookie ('LJENAME' ، NEMNAME ، 'MYMAXGRADE' ، MAXGRADE.TOSTRING () ، 365) ؛
}
ClearInterval (مؤقت) ؛
tapme () ؛
}
آخر
{
if (ifcrash ())
{
عشوائي () ؛
}
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.antick) // تتبع عكس اتجاه عقارب الساعة
{
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 () ؛ // نقطة التتبع عبر الإنترنت
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 timer ؛
وظيفة startGame () {// ابدأ اللعبة
إذا (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. مكتوب في النهاية
هذا هو بحتة ذاتي. في اليوم الثالث بعد الكتابة ، كنت مشغولاً بتقديم السير الذاتية للعثور على فترة تدريب ولم يكن لدي وقت للعناية به. رميته في دائرة أصدقائي حتى يلعب أصدقائي. لقد مر هذا الشهر وأشاهد هذه اللعبة مرة أخرى. أشعر أنه لا ينبغي أن يموت مثل هذا. ليس لدي أي مهارات وأفعل ذلك بشكل جيد للغاية. لذلك ، آمل أن يساعد هذا المقال بعض الأصدقاء المهتمين في بونغو. بالإضافة إلى ذلك ، آمل أنه إذا كان بإمكان أي خبير في هذا المجال أن يقدم لي نصيحة إذا رأى ذلك ، فإنه يرحب بي بترك رسالة لجميع الشكوك والنصائح. شكرًا لك!