|
كيف أستطيع أن أصنع لعبة السكرامبل (الأحرف المبعثرة) الخاصة بي؟
إذاً فقد قررت صنع لعبة السكرامبل الخاصة بك؟ جيد، سوف نقوم بعمل لعبة سكرامبل في هذا الدرس
:بعض المبادئ
الكثير من المستخدمين يريدون عمل الأشياء و الـ "برامج" دون معرفة شئ واحد عن برمجة الام آي آر سي! و بالرغم أنه لا يتوجب علي شرح ذلك فهذا موضوع آخر لا يتعلق بهذا الدرس، و لكنني سأقوم بفعل ذلك من باب التذكير
أولا: إن جميع الأوامر تُكتب (أو تُنفّذ إن صح التعبير) في ما يسمى بـ "الام آي آر سي اديتور" او "خادم اوامر الام آي آر سي". يمكنك تسميته كما تريد... الكثير يسمونه (بجميع أفرعه) بـ "الرموت" رغم أن "الرموت" مجرد جزء واحد منه. على العموم، جميع الاوامر التي سوف نستخدمها في هذا الدرس سوف يتم وضعها في هذا الـ "خادم". انظر إلى الصورة في الأسفل
ثانيا: للسهولة سوف أجعل جميع الأوامر توضع في الرموت فقط، كما أننا سوف نستخدم ملف جديد لوضع هذه الأوامر، اليك الطريقة
اضغط على ألت و حرف الآر على لوحة المفاتيح (ALT+R) بينما تكون موجوداً في إحدى نوافذ الام آي آر سي
سوف يظهر خادم الأوامر، اضغط بعد ذلك على صفحة الرموت
كما هو موضح بالشكل "File" من قائمة "New" بعد ذلك اختر كلمة
ملاحظة: أنت تحتاج إلى نسخة جديدة من الام آي آر سي، على الأقل النسخة رقم 5.9 أو أكثر
!حسنا، أظن أنه يمكننا البدء الآن
ماذا نريد أن نفعل؟
كل ما نريد فعله هو أن نسأل سؤالاً في القناة و نرسل إجابة مبعثرة (و قد يكون ذلك أصعب جزء)، ثم علينا انتظار أول مستخدم يكتب الإجابة الصحيحة فنضيف في رصيده نقطة واحدة
و كيف نفعل ذلك؟
سوف نقوم بفعل ذلك خطوة بخطوة، أولاً نقوم بعمل قائمة في القناة و التي تتضمن خيارات طرح السؤال أو إيقاف اللعبة
menu channel {
;أمر القائمة (للقناة) في الام آي آر سي...
لعبة السكرامبل
.اسأل:{
if ($me !ison %scr.chan) {
;التأكد من أننا موجودين في قناة السكرامبل...
%scr.chan = $$?="الرجاء ادخال اسم القناة:"
if (%scr.chan !ischan) {
echo -a الرجاء اختيار اسم قناة انت موجود فيها
return
}
if ($hget(scrpoints)) { hfree scrpoints }
;يتم مسح محتويات جدول النقاط إن وجد...
}
%scr.ques = $$?="أدخل السؤال ( $+ %scr.chan $+ ):"
;%scr.ques يتم تخزين السؤال في
%scr.ans = $$?="أدخل الإجابة:"
;%scr.ans و الإجابة في...
%scr.switch = 1
msg %scr.chan بدأت لعبة السكرامبل
msg %scr.chan التلميح: %scr.ques
msg %scr.chan الإجابة: $_scrambled(%scr.ans)
;طرح السؤال و الإجابة المبعثرة في القناة مع تشغيل أمر استقبال الإجابات
}
.إيقاف اللعبة:{
if (%scr.chan) {
if ($?!="هل أنت متأكد؟") {
if (%scr.chan ischan) { msg %scr.chan تم إيقاف لعبة السكرامبل }
unset %scr.*
}
}
}
}
|
ملاحظة: جميع الكتابات التي تبدأ بحرف الـ ";" عبارة عن مجرد تعليق و أن برنامج الام آي آر سي لا يقوم بتنفيذه كأمر
$_scrambled(%scr.ans) قد تتساءل الآن: ما هو
$_scrambled نعم! إنه الإجابة المبعثرة. إن
%scr.ans يقوم بتحويل الإجابة الصحيحة و هي
%scr.ans إلى أجابة مبعثرة مع ملاحظة أنه لا يغير محتويات
و لكن كيف يحدث ذلك؟
إنه بالطبع لا يحدث تلقائياً، فيجب علينا أن نقوم بصنع شي خاص يسمى بالـ "آيدنتفاير". سمّه كما تريد
:يمكننا صنع هذا الـ "آيدنتفاير" بهذه الطريقة
alias _scrambled {
var %_words = 1
while (%_words <= $numtok($1-,32)) {
var %_scrwords = %_scrwords $_scramd($gettok($1-,%_words,32))
inc %_words
}
return %_scrwords
}
alias _scramd {
if ($1 == $null) { return }
var %actext = $1
var %numberofchars = $len($1)
while (%numberofchars) {
var %randomchar = $r(1,%numberofchars)
var %scramdans = %scramdans $+ $mid(%actext,%randomchar,1)
var %actext = $left(%actext,$calc(%randomchar - 1)) $+ $right(%actext,$calc($len(%actext) - %randomchar))
dec %numberofchars
}
return %scramdans
}
|
و لكن ما كل هذه "الفوضى"؟
حسناً، إن شرح طريقة عمل هذا الـ "آيدنتفاير" يتطلب وقتاً كبيراً ، خصوصاً و أن الكثير لا يعرف طريقة عمل الأوامر (بل و لا يهتم)، إذا كنت من أحد المهتمين يمكنك مراسلتي على البريد الإلكتروني
goblin@arabchat.org
حسنا، و لكن كيف أستطيع أن "أُمسك" بأسرع إجابة و أضيف نقطة إلى جدول النقاط؟
on TEXT ليس صعباً جداً فعل ذلك... سوف نتسخدم الحدث
لمعرفة أول إجابة صحيحة
on *:TEXT:%scr.ans:%scr.chan:{
;إذا ارسل أحد الإجابة الصحيحة إلى قناة السكرامبل فيجب فعل التالي...
if (%scr.switch) {
;يتم إضافة نقطة و إرسال الرد إلى القناة فقط إذا كان هذا الشخص هو أول شخص يرسل الإجابة الصحيحة
unset %scr.switch
;لا تستقبل أي إجابات أخرى
hadd -m scrpoints $wildsite $calc($hget(scrpoints,$wildsite) + 1)
;يتم إضافة نقطة في رصيد هذا الشخص على العنوان و ليس النك حتى إذا تغير النك فإن النقاط تظل مثلما كانت لنفس الشخص
msg $chan Correct answer $nick $+ ! You now have $hget(scrpoints,$wildsite) point(s)
;أرسال الرد إلى القناة
}
}
|
مبروك! لقد انتهينا من صنع اللعبة! و لكن هناك امران إضافيان يقومان بمسح معلومات لعبة السكرامبل عند بدء برنامج الام آي آر سي أو الخروج منه لكي نتجنب الأخطاء
on *:START:{ unset %scr.* }
on *:EXIT:{ unset %scr.* }
|
أتمنى أن تكون قد استفدت من هذا الدرس و استطعت أن تصنع لعبة السكرامبل الخاصة بك. حظاً موفقاً
هذا هو الأمر بالكامل، و الذي اتفقنا أن نضعه في الـ "رموت"، تأكد أن تضغط على زر "أوكي" بعد أن تضع الأوامر، كذلك تأكد أن الـ "رموت" قد تم تشغيله
/remote on
menu channel {
;أمر القائمة (للقناة) في الام آي آر سي...
لعبة السكرامبل
.اسأل:{
if ($me !ison %scr.chan) {
;التأكد من أننا موجودين في قناة السكرامبل...
%scr.chan = $$?="الرجاء ادخال اسم القناة:"
if (%scr.chan !ischan) {
echo -a الرجاء اختيار اسم قناة انت موجود فيها
return
}
if ($hget(scrpoints)) { hfree scrpoints }
;يتم مسح محتويات جدول النقاط إن وجد...
}
%scr.ques = $$?="أدخل السؤال ( $+ %scr.chan $+ ):"
;%scr.ques يتم تخزين السؤال في
%scr.ans = $$?="أدخل الإجابة:"
;%scr.ans و الإجابة في...
%scr.switch = 1
msg %scr.chan بدأت لعبة السكرامبل
msg %scr.chan التلميح: %scr.ques
msg %scr.chan الإجابة: $_scrambled(%scr.ans)
;طرح السؤال و الإجابة المبعثرة في القناة مع تشغيل أمر استقبال الإجابات
}
.إيقاف اللعبة:{
if (%scr.chan) {
if ($?!="هل أنت متأكد؟") {
if (%scr.chan ischan) { msg %scr.chan تم إيقاف لعبة السكرامبل }
unset %scr.*
}
}
}
}
alias _scrambled {
var %_words = 1
while (%_words <= $numtok($1-,32)) {
var %_scrwords = %_scrwords $_scramd($gettok($1-,%_words,32))
inc %_words
}
return %_scrwords
}
alias _scramd {
if ($1 == $null) { return }
var %actext = $1
var %numberofchars = $len($1)
while (%numberofchars) {
var %randomchar = $r(1,%numberofchars)
var %scramdans = %scramdans $+ $mid(%actext,%randomchar,1)
var %actext = $left(%actext,$calc(%randomchar - 1)) $+ $right(%actext,$calc($len(%actext) - %randomchar))
dec %numberofchars
}
return %scramdans
}
on *:TEXT:%scr.ans:%scr.chan:{
;إذا ارسل أحد الإجابة الصحيحة إلى قناة السكرامبل فيجب فعل التالي...
if (%scr.switch) {
;يتم إضافة نقطة و إرسال الرد إلى القناة فقط إذا كان هذا الشخص هو أول شخص يرسل الإجابة الصحيحة
unset %scr.switch
;لا تستقبل أي إجابات أخرى
hadd -m scrpoints $wildsite $calc($hget(scrpoints,$wildsite) + 1)
;يتم إضافة نقطة في رصيد هذا الشخص على العنوان و ليس النك حتى إذا تغير النك فإن النقاط تظل مثلما كانت لنفس الشخص
msg $chan Correct answer $nick $+ ! You now have $hget(scrpoints,$wildsite) point(s)
;أرسال الرد إلى القناة
}
}
on *:START:{ unset %scr.* }
on *:EXIT:{ unset %scr.* }
|
الآن يمكنك رؤية قائمة القناة، و على الأرجح سوف تجد كلمة "لعبة السكرامبل" في الأسفل إذا تم فعل كل شي بالطريقة الصحيحة
أي استفسار؟
goblin@arabchat.org
العودة إلى الصفحة الرئيسية
|