كود اللعبة كاملا
الملف الرئيسي للعبة:
from turtle import Screen
from Scoreboard import scoreboard
from food import Food
from snake_file import Snake
from intro import intro
import time
import keyboard
# عمل نافذة اللعبة
window = Screen()
window.setup(750,615)
window.cv._rootwindow.resizable(False, False)
window.bgcolor("#020202")
window.title("Language : اختيار اللغة")
window.listen()
window.tracer(0)
# تشغيل انترو اللعبة
introGame = intro()
# اختيار اللغة
introGame.lang()
window.update()
while True:
if keyboard.is_pressed("2"):
lang = "2"
break
if keyboard.is_pressed("1"):
lang = "1"
break
# متغيرات اللغة الإنجليزية
if lang == "2":
title = "Snake Game Version: 1.27"
font = "Arial"
font1 = "System"
font2 = "Fixedsys"
fontsnakegame = "system"
sizesnakegame = 100
gotosnakegame = -100
snakegame = "Snake\nGame"
version = "snake game version: 1.27, Programer: Badr-den alk"
enterGame = "Press Enter to start game"
enterMode = f"Choose your preferred game mode\n{" "*15}to start playing."
classicmode = "1: Classic game"
boder = "2: Border game"
obstacles = "3: Obstacles game"
sizeobs = 27
tip1 = "Press Options 1 to Classic game, 2 to Border game, 3 to Obstacles game"
scorec = "Score"
modeclassic = "Classic game"
gotocla = 158
modeboder = "Border game"
gotobor = 165
modeobstacles = "Obstacles game"
gotoobs = 118
gameover = "Game Over"
final = "Final Score"
again = "1: Play again"
mode_menu = "2: Mode Menu"
exit_game = "3: Exit Game"
tip2 = "Press Options 1 to Play again, 2 to Mode Menu, 3 to Exet Game"
# متغيرات اللغة العربية
elif lang == "1":
title = "لعبة الثعبان الإصدار: 1.27"
font = "Calibri"
font1 = "abdomaster-normal"
font2 = "Calibri"
fontsnakegame = "Ara Hamah AlHorra"
sizesnakegame = 75
gotosnakegame = -80
snakegame = "لـعـبـــة\nالثعبان"
version = "لعبة الثعبان الإصدار: 1.27 , المطور: بدر الدين الخطيب"
enterGame = "اضغط زر الإدخال أو المسافة لبدء اللعبة"
enterMode = f"اختر نمط اللعبة المفضل لديك\n{" "*16}.لبدء اللعبة"
classicmode = "1: لعبة عـادية"
boder = "2: لعبة سيـاج"
obstacles = "3: لعبة حواجز"
sizeobs = 35
tip1 = "اضغط الازرار: 1 للعبة عادية , 2 للعبة سياج , 3 للعبة الحواجز"
scorec = "النقاط "
modeclassic = "النمط : عادي"
gotocla = 205
modeboder = "النمط : سياج"
gotobor = 205
modeobstacles = "النمط : حواجز"
gotoobs = 190
gameover = "انتهت اللعبة"
final = "المجموع النهائي للنقاط"
again = "1 اللعـب مجددا"
mode_menu = "2 الرجوع للنمط"
exit_game = "3 إغـلاق اللعبة"
tip2 = "اضغط الازرار: 1 للعب مجددا, 2 الرجوع لاختيار نمط, 3 للخروج من اللعبة"
window.title(title)
window.clear()
window.bgcolor("#020202")
window.update()
# مقدمة اللعبة
introGame.sketch( font2 , version , snakegame , fontsnakegame , sizesnakegame , gotosnakegame)
while True:
introGame.enterwhite(font, enterGame)
time.sleep(0.3)
window.update()
if keyboard.is_pressed("Enter") or keyboard.is_pressed("Space"):
break
introGame.enterblack()
time.sleep(0.3)
window.update()
if keyboard.is_pressed("Enter") or keyboard.is_pressed("Space"):
break
window.clear()
window.bgcolor("#020202")
# خيارات نمط اللعبة
def introGamechoice():
global mode
introGame.mode(font1 , enterMode , classicmode , boder , obstacles , tip1 , sizeobs)
while True:
if keyboard.is_pressed("3"):
mode = "3"
break
if keyboard.is_pressed("2"):
mode = "2"
break
if keyboard.is_pressed("1"):
mode = "1"
break
# فانكشن تشغيل اللعبة بنمط طبيعي
def classic():
global score
# بدئ اللعبة
window.clear()
window.bgcolor("#020202")
window.tracer(0)
board = scoreboard()
food = Food()
snake = Snake("#b3b370","#c9c930")
game_on = True
snake_speed = 0.14
board.classicScore(scorec,modeclassic,font,gotocla)
while game_on:
window.update()
snake.run()
time.sleep(snake_speed)
# ازرار سير السحفاة بالاسهم فوق اسفل يسار يمين
if keyboard.is_pressed("w") or keyboard.is_pressed("Up"):
snake.up()
elif keyboard.is_pressed("a") or keyboard.is_pressed("Left"):
snake.left()
elif keyboard.is_pressed("d") or keyboard.is_pressed("Right"):
snake.rghit()
elif keyboard.is_pressed("s") or keyboard.is_pressed("Down"):
snake.down()
# التحقق من ان الثعبان لم يخرج عن الاطار
if snake.head.xcor() >= 380:
snake.head.setx(-400)
elif snake.head.xcor() <= -400:
snake.head.setx(380)
elif snake.head.ycor() <= -320:
snake.head.sety(320)
elif snake.head.ycor() >= 320:
snake.head.sety(-320)
# التحقق من اكل الثعبان للطعام
if snake.head.distance(food) < 25:
snake.append("#b3b370")
board.update()
score = board.score
board.classicScore(scorec,modeclassic,font,gotocla)
food.appear()
for i in range(len(snake.snakes)-1):
if snake.snakes[i].distance(food) <= 20:
food.appear()
if snake_speed >= 0.04:
snake_speed -= 0.002
# التحق من عدم استضام الثعبان
for error in snake.snakes[:-1]:
if snake.head.distance(error) < 10:
game_on = False
board.score = 0
# فانكشن تشغيل اللعبة داخل السياج
def border():
global score
# بدئ اللعبة
window.clear()
window.bgcolor("#020202")
window.tracer(0)
board = scoreboard()
food = Food()
snake = Snake("#62979c","#18868f")
game_on = True
snake_speed = 0.14
board.scores(scorec,modeboder,font,gotobor)
while game_on:
window.update()
snake.run()
time.sleep(snake_speed)
# ازرار سير السحفاة بالاسهم فوق اسفل يسار يمين
if keyboard.is_pressed("w") or keyboard.is_pressed("Up"):
snake.up()
elif keyboard.is_pressed("a") or keyboard.is_pressed("Left"):
snake.left()
elif keyboard.is_pressed("d") or keyboard.is_pressed("Right"):
snake.rghit()
elif keyboard.is_pressed("s") or keyboard.is_pressed("Down"):
snake.down()
# التحقق من ان الثعبان لم يخرج عن الاطار
if snake.head.xcor() >= 350 or snake.head.xcor() <= -350 or snake.head.ycor() >= 250 or snake.head.ycor() <= -290:
game_on = False
board.score = 0
# التحقق من اكل الثعبان للطعام
if snake.head.distance(food) < 25:
snake.append("#62979c")
board.update()
score = board.score
board.scores(scorec,modeboder,font,gotobor)
food.appear()
for i in range(len(snake.snakes)-1):
if snake.snakes[i].distance(food) <= 20:
food.appear()
if snake_speed >= 0.04:
snake_speed -= 0.002
# التحق من عدم استضام الثعبان
for error in snake.snakes[:-1]:
if snake.head.distance(error) < 10:
game_on = False
board.score = 0
# فانشكن تشغيل اللعبة مع حواجز وعقبات
def Obstacles():
global score
# بدئ اللعبة
window.clear()
window.bgcolor("#020202")
window.tracer(0)
board = scoreboard()
food = Food()
snake = Snake("#7fc794","green")
game_on = True
snake_speed = 0.14
board.ObstaclesScore(scorec,modeobstacles,font,gotoobs)
while game_on:
while True:
for i in range(len(snake.snakes)-1):
# التحقق من عدم خروج الطعام اسفل الذيل
if snake.snakes[i].distance(food) <= 20:
food.appear()
if food.xcor() >= 70 and food.ycor() <= 130 and food.ycor() >= 70:
food.appear()
elif food.xcor() >= 70 and food.ycor() >= -170 and food.ycor() <= -110:
food.appear()
elif food.xcor() <= -30 and food.ycor() >= -50 and food.ycor() <= 10:
food.appear()
elif food.xcor() <= -150 and food.xcor() >= -210 and food.ycor() >= 80 and food.ycor() <= 240:
food.appear()
elif food.xcor() <= -150 and food.xcor() >= -210 and food.ycor() <= -120 and food.ycor() >= -280:
food.appear()
else:
break
window.update()
snake.run()
time.sleep(snake_speed)
# ازرار سير السحفاة بالاسهم فوق اسفل يسار يمين
if keyboard.is_pressed("w") or keyboard.is_pressed("Up"):
snake.up()
elif keyboard.is_pressed("a") or keyboard.is_pressed("Left"):
snake.left()
elif keyboard.is_pressed("d") or keyboard.is_pressed("Right"):
snake.rghit()
elif keyboard.is_pressed("s") or keyboard.is_pressed("Down"):
snake.down()
# التحقق من ان الثعبان لم يخرج عن الاطار
if snake.head.xcor() >= 350 or snake.head.xcor() <= -350 or snake.head.ycor() >= 250 or snake.head.ycor() <= -290:
game_on = False
board.score = 0
# التحقق من ان الثعبان لم يستضم بالحواجز
elif snake.head.xcor() >= 50 and snake.head.ycor() <= 110 and snake.head.ycor() >= 90:
game_on = False
board.score = 0
elif snake.head.xcor() >= 50 and snake.head.ycor() >= -150 and snake.head.ycor() <= -130:
game_on = False
board.score = 0
elif snake.head.xcor() <= -50 and snake.head.ycor() >= -30 and snake.head.ycor() <= -10:
game_on = False
board.score = 0
elif snake.head.xcor() <= -170 and snake.head.xcor() >= -190 and snake.head.ycor() >= 100 and snake.head.ycor() <= 230:
game_on = False
board.score = 0
elif snake.head.xcor() <= -170 and snake.head.xcor() >= -190 and snake.head.ycor() <= -140 and snake.head.ycor() >= -270:
game_on = False
board.score = 0
# التحقق من اكل الثعبان للطعام
if snake.head.distance(food) < 25:
snake.append("#7fc794")
board.update()
score = board.score
board.ObstaclesScore(scorec,modeobstacles,font,gotoobs)
food.appear()
# التحقق من سرعة الثعبان
if snake_speed >= 0.04:
snake_speed -= 0.002
# التحقق من عدم وجود الطعام عند الحواجز
while True:
for i in range(len(snake.snakes)-1):
# التحقق من عدم خروج الطعام اسفل الذيل
if snake.snakes[i].distance(food) <= 20:
food.appear()
if food.xcor() >= 70 and food.ycor() <= 130 and food.ycor() >= 70:
food.appear()
elif food.xcor() >= 70 and food.ycor() >= -170 and food.ycor() <= -110:
food.appear()
elif food.xcor() <= -30 and food.ycor() >= -50 and food.ycor() <= 10:
food.appear()
elif food.xcor() <= -150 and food.xcor() >= -210 and food.ycor() >= 80 and food.ycor() <= 240:
food.appear()
elif food.xcor() <= -150 and food.xcor() >= -210 and food.ycor() <= -120 and food.ycor() >= -280:
food.appear()
else:
break
# التحق من عدم استضام الثعبان بالذيل
for error in snake.snakes[:-1]:
if snake.head.distance(error) < 10:
game_on = False
board.score = 0
# متغير النقاط
score = 0
# فانكشن تشغيل المرحلة حسب اختيار المستخدم
def stage():
# التحقق من خيار المستخدك
if mode == "1":
classic()
elif mode == "2":
border()
elif mode == "3":
Obstacles()
time.sleep(1)
# تشغيل شاشة الخسارة
game_over = scoreboard()
window.clear()
window.bgcolor("#020202")
game_over.gameover(score, gameover , final , again , mode_menu , exit_game , tip2 , font1)
# خيارات الخروج من اللعبة
while True:
if keyboard.is_pressed("3"):
break
if keyboard.is_pressed("2"):
window.clear()
window.bgcolor("#020202")
play()
if keyboard.is_pressed("1"):
window.clear()
window.bgcolor("#020202")
stage()
# متغير النمط
mode = ""
# فانشكن تشغيل اللعبة كاملة مع الانماط
def play():
introGamechoice()
global mode
while True:
if keyboard.is_pressed("3"):
mode = "3"
break
if keyboard.is_pressed("2"):
mode = "2"
break
if keyboard.is_pressed("1"):
mode = "1"
break
stage()
# تشغيل اللعبة
play()
ملف الثعبان
from turtle import Turtle
class Snake:
def __init__(self , colottail , colorhead):
self.goto = (-20,0,20)
self.snakes = []
self.create(colottail)
self.snakes[-1].color(colorhead)
self.head = self.snakes[-1]
# فانكشن انشاء جسم الثعبان الاولي
def create(self , colottail):
for i in range(len(self.goto)):
square = Turtle("square")
square.color(colottail)
square.penup()
square.shapesize(1)
square.goto(self.goto[i],0)
self.snakes.append(square)
# فانكشن سير الثعبان
def run(self):
for i in range(len(self.snakes)-1):
self.snakes[i].goto(self.snakes[i+1].pos())
self.head.forward(20)
# فانكشنس السير بشكل اتجاهات فوق اسفل يسار يمين
def up(self):
if self.head.heading() == 270 or self.head.heading() == 90:
pass
else:
self.head.setheading(90)
def down(self):
if self.head.heading() == 90 or self.head.heading() == 270:
pass
else:
self.head.setheading(270)
def rghit(self):
if self.head.heading() == 180 or self.head.heading() == 0:
pass
else:
self.head.setheading(0)
def left(self):
if self.head.heading() == 0 or self.head.heading() == 180:
pass
else:
self.head.setheading(180)
# فانكشن زيادة طول الثعبان
def append(self , colottail):
square = Turtle("square")
square.color(colottail)
square.penup()
square.shapesize(1)
square.goto(self.snakes[0].pos())
self.snakes.insert(0,square)
ملف السكوربورد
from turtle import Turtle
class scoreboard(Turtle):
def __init__(self):
super().__init__()
self.score = 0
self.color("#D7E4D7")
self.speed(0)
self.hideturtle()
# فانكشن اللعبة داخل السياج
def scores(self , score , modeboder , font , goto):
# def scores(self):
self.penup()
self.color("#8DBFC3")
self.goto(353,250)
self.pendown()
self.goto(353,-290)
self.goto(-363,-290)
self.goto(-363,250)
self.goto(353,250)
self.penup()
self.goto(-358,260)
self.write(f"{score}: {self.score}" ,font=(f"{font}",25,"normal"))
self.goto(goto,260)
self.write(f"{modeboder}" ,font=(f"{font}",25,"normal"))
# فانكشن اللعبة بنمط كلاسيك
def classicScore(self , score , modeclassic , font , goto):
self.penup()
self.color("#C0C085")
self.goto(-358,260)
self.write(f"{score}: {self.score}" ,font=({font},25,"normal"))
self.goto(goto,260)
self.write(f"{modeclassic}" ,font=({font},25,"normal"))
# فانكشن اللعبة مع حواجز
def ObstaclesScore(self , score , modeobs , font , goto):
self.color("#3E7E51")
self.penup()
self.goto(353,250)
self.pendown()
self.goto(353,-290)
self.goto(-363,-290)
self.goto(-363,250)
self.goto(353,250)
self.penup()
self.goto(-358,260)
self.write(f"{score}: {self.score}" ,font=(font,25,"normal"))
self.goto(goto,260)
self.write(f"{modeobs}" ,font=(font,25,"normal"))
self.color("#3E7E51")
self.goto(353,110)
self.pendown()
self.begin_fill()
self.goto(50,110)
self.goto(50,90)
self.goto(353,90)
self.end_fill()
self.color("#254F31")
self.penup()
self.goto(-363,-30)
self.pendown()
self.begin_fill()
self.goto(-50,-30)
self.goto(-50,-10)
self.goto(-363,-10)
self.end_fill()
self.color("#152D1C")
self.penup()
self.goto(353,-130)
self.pendown()
self.begin_fill()
self.goto(50,-130)
self.goto(50,-150)
self.goto(353,-150)
self.end_fill()
self.color("#3E7E51")
self.penup()
self.goto(-190,230)
self.pendown()
self.begin_fill()
self.goto(-170,230)
self.goto(-170,90)
self.goto(-190,90)
self.goto(-190,230)
self.end_fill()
self.color("#152D1C")
self.penup()
self.goto(-190,-270)
self.pendown()
self.begin_fill()
self.goto(-170,-270)
self.goto(-170,-130)
self.goto(-190,-130)
self.goto(-190,-270)
self.end_fill()
# فانكشن تحديث الدرجات
def update(self):
self.score += 1
self.clear()
# فانكشن الخسارة
def gameover(self,score , gameover , final , again , mode , exit , tips , font):
self.penup()
self.color("#E3443F")
self.goto(0,160)
self.write(gameover, align="center" , font=(font,50,"normal"))
self.goto(0,110)
self.write(f"{final} : {score}" , align="center", font=(font,20,"normal"))
self.goto(0,0)
self.color("#758E70")
self.write(again, align="center", font=(font,35,"normal"))
self.goto(0,-85)
self.color("#566953")
self.write(mode , align="center", font=(font,35,"normal"))
self.goto(0,-170)
self.color("#445241")
self.write(exit , align="center", font=(font,35,"normal"))
self.goto(0,-250)
self.color("#32462E")
self.write(tips, align="center", font=("Kokila", 15, "bold"))
ملف المقدمة
from turtle import Turtle
class intro(Turtle):
def __init__(self):
super().__init__()
self.color("#072003","#17690B")
self.hideturtle()
self.speed("fastest")
self.pensize(5)
# فانكشن اختيار اللغة
def lang(self):
self.go((0,40))
self.color("#758E70")
self.write("1: عربي", align="center", font=("System", 35, "bold"))
self.go((0,-60))
self.color("#566953")
self.write("2: English", align="center", font=("System", 35, "bold"))
self.go((0,-250))
self.color("#32462E")
self.write(f"{" "*10}أضغط رقم 1 للاختيار اللغة العربية", align="left", font=("Kokila", 15, "bold"))
self.go((0,-250))
self.color("#32462E")
self.write("Press number 2 to selcet English", align="right", font=("Kokila", 15))
# فانشكن الانحاء في الرسم لليسار
def dirleft(self,poran,left,poforward):
for _ in range(poran):
self.left(left)
self.forward(poforward)
# فانشكن الانحاء في الرسم لليمين
def dirright(self,poran,right,poforward):
for _ in range(poran):
self.right(right)
self.forward(poforward)
# فانكشن تنقل السلحفاة للرسم
def go(self,num):
self.penup()
self.goto(num)
self.pendown()
# فانكشن رسم الثعبان
def sketch(self, font , version , snagegame , font2 , size , gotosnakegame):
super().__init__()
self.color("#072003","#17690B")
self.hideturtle()
self.speed("fastest")
self.pensize(5)
self.go((-210,-78))
self.begin_fill()
self.forward(150)
self.dirleft(30,5.63,6.2)
self.setheading(180)
self.forward(112)
self.dirright(30,5.63,2)
self.setheading(0)
self.forward(35)
self.setheading(300)
self.dirleft(15,4,2)
self.forward(20)
self.dirleft(39,4,2.5)
self.setheading(180)
self.forward(32)
self.dirleft(14,4,2)
self.setheading(180)
self.forward(35)
self.dirleft(30,5.63,6.2)
self.setheading(0)
self.forward(112)
self.dirright(30,5.63,2)
self.setheading(180)
self.forward(150)
self.dirleft(30,5.63,2)
self.end_fill()
self.color("#072003","black")
self.go((-88,105))
self.begin_fill()
self.circle(12)
self.end_fill()
self.color("#740705")
self.pensize(7)
self.go((-48,110))
self.setheading(0)
self.forward(15)
self.setheading(320)
self.forward(15)
self.setheading(138)
self.forward(15)
self.setheading(40)
self.forward(15)
self.go((30,gotosnakegame))
self.color("#253922")
self.write(snagegame,font=(font2, size, "bold"))
self.go((0,-120))
self.write(version, align="center", font=(font, 16, "bold"))
# فانشكن رسم كلمة الدخول للعبة باللون الابيض
def enterwhite(self , font , enterGame):
self.go((0,-250))
self.color("#BAC5B8")
self.write(enterGame, align="center", font=(font, 28, "bold"))
# فانكشن اخفاء كلمة الدخول
def enterblack(self):
self.go((-250,-225))
self.color("#020202")
self.pensize(50)
self.setheading(0)
self.forward(500)
# فانكشن اختيار النمط
def mode(self , font , enterMode , classic , border , obs , tip , sizeobs):
self.go((0,180))
self.color("#9CAD98")
self.write(enterMode, align="center", font=(font, 20, "bold"))
self.go((0,60))
self.color("#758E70")
self.write(classic, align="center", font=(font, 35, "bold"))
self.go((0,-40))
self.color("#566953")
self.write(border, align="center", font=(font, 35, "bold"))
self.go((0,-140))
self.color("#445241")
self.write(obs, align="center", font=(font, sizeobs, "bold"))
self.go((0,-250))
self.color("#32462E")
self.write(tip, align="center", font=("Kokila", 15, "bold"))
ملف الطعام
from turtle import Turtle
import random
class Food(Turtle):
def __init__(self):
super().__init__()
self.shape("circle")
self.color("red")
self.shapesize(0.8,0.8)
self.penup()
self.appear()
# فانكشن وضع الطعام في مكان مخلتف
def appear(self):
x = random.randint(-340,340)
y = random.randint(-240,230)
self.goto(x,y)