|
| | كالعادة مع الحصريات << تعلم البرمجة على الpsp بلغة lua>> | |
| | كاتب الموضوع | رسالة |
---|
Resident المدير العام
عدد الرسائل : 2713 العمر : 33 البلد : المغرب السٌّمعَة : 0 عـــدد النـقــاط: : 5983 تاريخ التسجيل : 13/09/2008
| موضوع: كالعادة مع الحصريات << تعلم البرمجة على الpsp بلغة lua>> الإثنين سبتمبر 15, 2008 4:21 pm | |
| كالعادة نحن السباقون منتديات الحصريات فهدا الشرح سيكون الاول على مستوى المنتديات العربية .... تتعتبر لغة البرمجة lua من لغات البرمجة الجديدة اذ ان اتجاه المبرمجين نحوها اصبح يزداد يوما بعد يوم لانها تعتبر من لغات البرمجة القوية و الحديثة كذلك فانها تتعتبر من اللغات التي تبرمج بها برامج اجهزة الالعاب لعل ابرز مثال و هو ما سنتطرق اليه جهاز psp اليكم الشرح
اولا نبدأ بقواعد و اساسيات لغة lua
اساسيات لغة lua
Opérateurs Arithmétiques
رمز:
+
-
*
/
^ (puissance)
Conditionnels
رمز:
< (اصغر)
> (اكبر)
<= (اصغر او مساو)
>= (اكبر او مساوو == (مساو)
~= (مختلف)
الكل يعطينا نتيجة صحيح{true} او خطا{false{.
Logiques
رمز:
and
or
not الكل يعطينا نتيجة true او false
Variables
رمز:
Variables globales
Elles sont déclarées le plus simplement,
variable = 10
v1,v2 = 4,18
Variables locales et Blocks
رمز:
Spécifiées par le mot clé local.
local i = 1
Un block est le corps de la structure d'une instruction, c'est la portée de la variable. On peut définir un block par do code end.
x = 10 local i = 1
while i<=x do local x = i*2 print(x) i = i + 1 end
if i > 20 then local x x = 20 print(x + 2) else print(x) end
print(x) variable globale variable local dans le script
variable local dans le while 2, 4, 6, 8...
variable local dans le then
22
10 (variable globale)
10 (variable globale)
Conditions
رمز:
if then else
Les structures sont,
if [condition] then
code
end
if a<0 then a = 0 end
if [condition] then
code
else
code
end
if a
Il est possible d'avoir plusieurs conditions avec elseif.
if op == "+" then r = a + b elseif op == "-" then r = a - b elseif op == "*" then r = a*b elseif op == "/" then r = a/b else error("invalid operation") end
Les boucles
CODE while
La structure est while [condition] do code end
local i = 1
while i<100 do
print(i)
i = i + 1
end
Repeat
رمز:
Syntaxe :
repeat
code
until [condition]
Tant que la condition n'est pas rempli la boucle s'exerce.
i=0
repeat
i=i+1
until i<10
for numérique
رمز:
Il y a aussi une boucle "généric".
La syntaxe est la suivante
for [mini],[maxi],[pas] do code end
Le paramètre [pas] est optionnel.
for i=10,0,-1 do
carre=i*i
end
On peut stopper la boucle avec l'instruction break.
Les fonctions
رمز:
Syntaxe
function x()
code
end
Pour appeler la fonction,
x()
Mêmes si la fonction n'a aucuns arguments, les () doivent être écrites.
Passer des arguments
رمز:
function carre(x)
x = x * x
end
carre(2) -----> appel la fonction carre(x) avec l'argument x=2.
Retourner des valeurs
استعمل خاصية return
رمز:
function carre(x)
a = x * x
return a
end
r = carre(2) -----> r est égal à 4.
return يجب ان تكون في آخر العملية .اعتذر على الكتابة بالفرنسية و لكن لغات البرمجة تدرس باللغات الاجنبية
Si pour une raison ou pour une autre vous avez besoin de retourner une valeur à l'intérieur de votre fonction et plus à la fin, vous devrez lui attribuer un block spécial.
Il est possible de passer plusieurs arguments, et de retourner plusieurs valeurs
رمز:
function Emc2(m,c)
a = c * c
b = m * a
return b,a
end
e,c2 = Emc2(10,2) -----> e = 40 et c2 = 4.
Math
Toutes les fonctions sont spécifiées avec une variable entre parenthèses. Mais pour certaines, les arguments sont précisés.
رمز:
set_value(x,y,math.floor(var))
pi=math.pi()
math.abs math.acos
math.asin
math.atan
math.atan2
math.ceil
math.cos
math.deg
math.exp
math.floor
math.log
math.log10
math.max(a,b,...)
math.min(a,b,...)
math.mod
math.pow(a,B)
math.rad
math.sin
math.sqrt
math.tan
math.frexp
math.ldexp
math.random(*)
math.randomseed(*)
math.pi valeur absolue acosinus (angle)
sinus (angle)
atangente (angle)
arrondie à l'entier supérieur
رمز:
cosinus (valeur)
conversion en degré
exponentiel
retourne un entier (tronque la partie décimale)
logarythme
رمز:
logarythme base 10
valeur maximum
valeur minimum
Puissance
رمز:
conversion en radian
sinus (valeur)
racine carré
tangente (valeur)
retourne un nombre "aléatoire" entre 0 et 1
graine pour le générateur de nombre
constante pi
عدل سابقا من قبل عبد العالي في الأحد أكتوبر 05, 2008 7:20 am عدل 1 مرات | |
| | | Resident المدير العام
عدد الرسائل : 2713 العمر : 33 البلد : المغرب السٌّمعَة : 0 عـــدد النـقــاط: : 5983 تاريخ التسجيل : 13/09/2008
| | | | Resident المدير العام
عدد الرسائل : 2713 العمر : 33 البلد : المغرب السٌّمعَة : 0 عـــدد النـقــاط: : 5983 تاريخ التسجيل : 13/09/2008
| موضوع: رد: كالعادة مع الحصريات << تعلم البرمجة على الpsp بلغة lua>> الإثنين سبتمبر 15, 2008 4:22 pm | |
| الدرس الثاني اظهار نص على شاشة الpsp و الان سوف اعلمكم كيف تبرمجون و سنبدأ بتعلم كيفية اظهار نص على شاشة الpsp ..اولا يجب اعطاء اللون في اول متغير (variable). رمز: rouge = Color.new(255,0,0) و الان اظنكم انكم لاحظتم اني وضعت اسم "rouge" و انتم تستطيعون وضع اي لون آخر .اما بعد فتوجد" Color.new" لا تنسو ان تكتبوا حرف c بالكبير majuscule و اذا لم تفعلوا فسيظهر لكم message d`erreur ...... اما الجزء "(255.0.0)" فهو رمز اللون الأحمر ..و الان ساريكم كيف تحصلون على رموز الكودات لمختلف الالوان ...افتحوا paint ثم couleur ثم modifier couleur ستحصلون على النافذة التالية اظغطوا على defenir les couleurs personalisees لتتحصلوا على :و هذه الصورة تبين الكود الخاص باللون الاحمرالذي قمت باحاطته
اما الان فهاهو الكود التالي رمز: text = "Mon premier programme en lua par jawher-karate" و الان انظروا هناك 2 من المتغيرات les variables معرفان و سوف نظهرهم على الشاشة رمز: screen:print (150,100,text,rouge) "screen:print" هي ما يعبر عنه باللغة الفرنسية fonction و هي لازمة لكي نظهر النص على شاشة ال psp و بما ان شاشة ال psp ابعادها 480 pixels من الطول 272 من الارتفاع فيجب ان يكون النص على احداثيات سنبرزها لكم انظروا الى الصورة لتعرفوا ابعاد ال psp بالرجوع الى صورة الابعاد ناخذ نصنا على 150 من طول شاشة ال psp و 100 من الارتفاع رمز: -- couleur (les commentaires sont repéré par deux tirets en début de ligne) rouge = Color.new (255,0,0) -- text text = "Mon premier programme en lua par jawher-karate" و الان يجب ان نضيف ال fonction التالية "screen.flip()" وهي لازمة للعملية التي ستقوم بها . لكي نظهر نص متواصل يجب اقحام ما يعبر عنه ب boucle conditionnelle : "while true do" الذي يسمح باعادة الفعل او الامر الذي قمنا باعطائه .ثم نظيف screen.waitVblankStart() متبوعة ب end لنقول ان البرنامج الذي سنصنعه قد انتهى و screen.waitVblankStart() يجب ان تكون ظاهرة عند نهاية برامجكم هاهي الصورة التي ستظهر لكم و هاهو الكود الكامل رمز: -- couleur rouge = Color.new (255,0,0) -- text text = "Mon premier programme en lua par jawher-karate" while true do screen:print (150,100,text,rouge) screen.flip() screen.waitVblankStart() end حمل code source كاملا من هنا | |
| | | Resident المدير العام
عدد الرسائل : 2713 العمر : 33 البلد : المغرب السٌّمعَة : 0 عـــدد النـقــاط: : 5983 تاريخ التسجيل : 13/09/2008
| موضوع: رد: كالعادة مع الحصريات << تعلم البرمجة على الpsp بلغة lua>> الإثنين سبتمبر 15, 2008 4:22 pm | |
| اما الآن فمع الدرس الثالث كيف نظهر الصور على شاشة ال psp
اولا نسق الصور يجب ان يكووووون .png و لا يتعدى 480*272 حجم شاشة ال psp اما بعد فسنظهر خلفية الشاشة و سنضيف عليها نصا لكي نبدأ سنضع variable او المتغير " bleu" ... انتم الان تعرفون كل شيء عن الالوان رمز: bleu = Color.new (0,0,255) ام بعد سنذهب للبحث عن backround اوfond d`ecran او الخلفية رمز: background = Image.load ("background.png") image.load تمكن من رفع الصورة .و لا تنسوا ان تضعوا "i" بالحجم الاكبر (majuscule) ..افترض انكم تطلبون اين مكان الصورة اذا يجب وضعها بجانبscript.lua و اذا اردتك رفع ملف صور لوضع جميع الصور اليكم الكود رمز: background = Image.load ("images/background.png") و الان حان دور وضع ال fonction الخاص لاضهار الصورة رمز: screen:blit (0,0,background) الاحداثيات 0.0 هي لوضع الخلفية
ملخص الكود رمز: bleu = Color.new (0,0,255) background = Image.load ("images/background.png") screen:blit (0,0,background) انظروا ماذا ظهر على الشاشة ( صورة ال psp هي الصورة التي استعملتها و تستطيعون ملاحظة ذلك اذا دققتم النظر ) اما الان فسنقوم باظهار النص على الشاشة اي على الصورة ..و هنا خدعتان طريفتان ساقدما لكم اذا اردتم رؤية نصوصكم على الشاشة ..هاهما مثالان رمز: screen:print ( 100, 00," La psp est une console portable génial", rouge) screen:blit (0,0,background) و رمز: screen:blit (0,0,background) screen:print ( 100, 00," La psp est une console portable génial", rouge) لاحضوا جيدا في المثال الاول سيكون اظهار النص قبل الصورة اما في المثال الثاني فبعدها نكمل الكود و قد اخترت لكم النص التالي للفائدة و لتتعلموا البرمجة رمز: text = "XtreamLua est un site proposant" text2 = "plusieurs cours de programmation en lua" screen:print ( 100,100, text, bleu) screen:print ( 100, 120, text2, bleu) و الآن انظروا الى screenshot الذي لدينا و الذي هو كنتيجة نهائية هاهو code source رمز: -- couleur bleu = Color.new (0,0,255) -- image background = Image.load ("images/background.png") --text text = "XtreamLua est un site proposant" text2 = "plusieurs cours de programmation en lua" --boucle conditionnelle while true do screen:blit (0,0,background) screen:print ( 100,100, text, bleu) screen:print ( 100, 120, text2, bleu) screen.flip() screen.waitVblankStart() end و لتحميل الكود كاملا من هنا | |
| | | Resident المدير العام
عدد الرسائل : 2713 العمر : 33 البلد : المغرب السٌّمعَة : 0 عـــدد النـقــاط: : 5983 تاريخ التسجيل : 13/09/2008
| موضوع: رد: كالعادة مع الحصريات << تعلم البرمجة على الpsp بلغة lua>> الإثنين سبتمبر 15, 2008 4:23 pm | |
| الدرس الرابع المعرفة التامة بالأزرار رمز: --text croix = "La touche enfoncée est la croix" rond = "La touche enfoncée est le rond" carré = "La touche enfoncée est le carré" triangle = "La touche enfoncée est le triangle" select = "La touche enfoncée est select" start = "La touche enfoncée est start" L = "La touche enfoncée est L" R = "La touche enfoncée est R" gauche = "La touche enfoncée est gauche" droite = "La touche enfoncée est droite" haut = "La touche enfoncée est haut" bas = "La touche enfoncée est bas" سوف نقوم بتعريف اللون . الاحمر على سبيل الذكر رمز: --couleur rouge = (255,0,0) ثم نضع screen:clear() على boule principale و سنقوم بمسح الشاشة ثم ننشأ variable اسمها pad و التي لها ك fonction اسمها Controls.read() و تستعمل للتجميع رمز: --boucle principale while true do screen:clear() pad = Controls.read() هاهو الكود كاملا رمز: --text croix = "La touche enfoncée est la croix" rond = "La touche enfoncée est le rond" carre = "La touche enfoncée est le carre" triangle = "La touche enfoncée est le triangle" select = "La touche enfoncée est select" start = "La touche enfoncée est start" L = "La touche enfoncée est L" R = "La touche enfoncée est R" gauche = "La touche enfoncée est gauche" droite = "La touche enfoncée est droite" haut = "La touche enfoncée est haut" bas = "La touche enfoncée est bas" --couleur rouge = Color.new(255,0,0) --boucle principale while true do screen:clear() pad = Controls.read() if pad:cross() then screen:print(10,10,croix,rouge) end if pad:circle() then screen:print(10,20,rond,rouge) end if pad:square() then screen:print(10,30,carre,rouge) end if pad:triangle() then screen:print(10,40,triangle,rouge) end if pad:l() then screen:print(10,50,L,rouge) end if pad:r() then screen:print(10,60,R,rouge) end if pad:select() then screen:print(10,70,select,rouge) end if pad:start() then screen:print(10,80,start,rouge) end if pad:up() then screen:print(10,90,haut,rouge) end if pad:down() then screen:print(10,100,bas,rouge) end if pad:left() then screen:print(10,110,gauche,rouge) end if pad:right() then screen:print(10,120,droite,rouge) end screen.waitVblankStart() screen.flip() end نأخذ على سبيل المثال الزر start و الذي يعطينا الكود التالي رمز: if pad:start() then screen:print(10,10,start,rouge) end لقد استعملنا boucle conditionnelle if-then-end ====> اذا ظغطنا على الزر start سيظهر النص التالي "la touche start est enfoncee"
افترض انكم فهمتم المبدأ هذه screenshot للبرنامج عند اشتغاله الكود كاملا من هنا | |
| | | Resident المدير العام
عدد الرسائل : 2713 العمر : 33 البلد : المغرب السٌّمعَة : 0 عـــدد النـقــاط: : 5983 تاريخ التسجيل : 13/09/2008
| موضوع: رد: كالعادة مع الحصريات << تعلم البرمجة على الpsp بلغة lua>> الإثنين سبتمبر 15, 2008 4:24 pm | |
| الدرس الخامس
لعبتك الاولى ببرمجة lua
يوف نقوم بتعلم اساسيات لعبة mario الشهيرة اولا نقوم برفع الصور التي تنحتاجها رمز: --images background = Image.load("background.png") marioleft = Image.load("marioleft.png") marioright = Image.load("marioright.png") اما الان فسنقوم باعطاء les variables لنتحصل على مكان انطلاق شخصيتنا mario ...انظروا "positionY" للعرض و "positionX" للطول رمز: --position de depart positionY = 210 positionX = 30 الان سنقوم بتعريف ازرار الpsp التي سنستخدمها ..سنستعمل نفس الطريقة في الدرس الرابع مع بعض التجديد رمز: if pad:left() then statut = "left" x = x+3 end if pad:right() then statut = "right" x = x-3 end if statut == "left" then screen:blit(positionX, positionY, marioleft) end if statut == "right" then screen:blit(positionX, positionY, marioright) end سنقوم بتفسير بعض المفاهيم
"if statut == "left" then screen:blit(positionX, positionY, marioleft)". للتحم في الاتجاهات... اما باقي المفردات فقد تعرضنا اليها ..... رمز: if pad:left() then screen:blit(positionX, positionY, marioright) x = x+3 end عندما نضغط على زر التوجيه الايسر mario يقوم بالتحرك يسارا و هكذا و عندم نكف عن الضغط يتوقف عندما تحاولون مع لعبتكم mario الآن يستطيع mario ان يتحرك يمينا و شمالا و لكن سنعترض بعض المشاكل و هي ان شقهخ يتوقف عن التحرك عندما يصل الى نهاية الشاشة و ذلك لعدم توفر خلفيات اخرى
سنحاول اصلاح هذا الخطا ب : رمز: if pad:left() then statut = "left" x = x+3 if positionX>10 then positionX=positionX-1 end end if pad:right() then statut = "right" x = x-3 if positionX<462 then positionX=positionX+1 end end ناخذ هذا السطر من الكتابة لنحلله رمز: if positionX>10 then positionX=positionX-1 و من خلال هذا السطر نفهم ان mario سيتوقف عند 10 بيكسالات من حافة الشاشة .و اذا اردتم 3 بيكسالات فقط عوضوا 10 ب 3 و هكذا
و الان نحاو ل اصلاح خطا آخر رمز: screen:blit(x, 0, background) screen:blit(x+480, 0, background) screen:blit(x-480, 0, background) if x == -480 or x == 480 then x = 0 end هذه الاربع سطور تعني سيكون هناك توقف للخلفية عند بعد معين
اليكم الصورة النهائية للعبة تحميل الكود كاملا من هنا | |
| | | | كالعادة مع الحصريات << تعلم البرمجة على الpsp بلغة lua>> | |
|
مواضيع مماثلة | |
|
مواضيع مماثلة | |
| |
| صلاحيات هذا المنتدى: | لاتستطيع الرد على المواضيع في هذا المنتدى
| |
| |
| |
|