Курсовая работа по дисциплине «Информатика»
на тему:
Игра на языке C и C++ «Jumping Guy»
Курсовую работу выполнили:
Студенты группы С-24
Артёменко Елена
Тюхов Роман
Проверил:
Аннотация
Цель работы – научиться программировать на языке С, изучение его библиотек и модулей. В работе используется язык программирования С с элементами С++, как техническое средство для создания игры. Конечным результатом является получение работающей программы. Разработана игра «Jumping Guy».
Оглавление
Аннотация. 2
Оглавление. 3
Описание. 4
Меню.. 4
Управление. 4
Аналоги. 4
Устройство игры.. 4
Средства разработки. 5
Используемая литература. 5
Приложение. 6
Описание
Игровое поле представляет собой тоннель состоящий из кубиков, которые являются как препятствиями так и потолком и полом тоннеля. За тоннелем виден постоянный неизменяющийся фон.
Главный персонаж – человечек, передвигающийся автоматически вперед(с точки зрения игрока).На самом деле персонаж бежит на месте, а поле двигается в лево. При столкновении с препятствием персонаж двигается влево вместе с тоннелем. В левой половине экрана находится неподвижный вертикальный луч, при столкновении с которым персонаж погибает и продолжает игру с контрольной точки или сначала. Персонаж контролируется пользователем при помощи клавиши “Пробел”. При нажатии клавиши персонаж игры зеркально переворачивается и двигается в сторону потолка (при повторном нажатии происходит обратное выше написанному, если при этом персонаж в воздухе то ничего не происходит). Игроку даётся три жизни; при потери каждой игра начинается с контрольной точки, при потери всех начинается со старта. В ходе игры можно собирать сердечки повышая количество запасных жизней. В верхнем правом углу находится счётчик жизней.
Цель игры – пройти тоннель не дав счётчику опуститься до нуля, собирая сердечки(дополнительные жизни), избегать врагов, дойти до конца тоннеля и обойти босса и победить Босса.
Виды бонусов:
ü Сердечко
Виды врагов:
ü Обычный враг – не может перемещаться между потолком и полом, а постоянно находится на одном из них и движется вместе с тоннелем(по сути обычное препятствие но от соприкосновения с ним можно погибнуть).…
ü Босс - отличается от обычного врага тем что может перемещаться между потолком и полом(перемещение происходит случайным образом, но босс не может менять направление перемещения в воздухе).
2. Меню
ü Новая игра (клавиша N) — игра начинается заново
ü Приостановить (клавиша P) — игра приостановлена
ü Продолжить (клавиша С) — продолжение приостановленной игры
ü Выход (клавиша ESС) – выход (работает как в меню так и во время игры)
3. Управление
ü «Пробел» - прыжок персонажа на другую скалу
4. Аналоги
( Gravity boy, NinJump)
5. Устройство игры
6. Средства разработки
Языки С и С++
7. Используемая литература
1. Стивен Прата
8. Приложение
# -*- coding: cp1251 -*-
import time
import sys
import random
import itertools
import pygame
import os
from pygame import *
import pygame. display
pygame. init()
pygame. display. init()
snakes=0
level=0
def start_game1():
# Initialise screen
pygame. init()
screen = pygame. display. set_mode((640,480))
pygame. display. set_caption("SNAKES")
# Fill background
background = pygame. Surface(screen. get_size())
background = background. convert()
background. fill((250, 250, 250))
# Display some text
font = pygame. font. Font(None, 36)
text = font. render(unicode("Выберите количество змей:от 3 до 9", 'cp1251'), 1, (10, 10, 10))
textpos = text. get_rect()
textpos. centerx = background. get_rect().centerx
textpos. centery = background. get_rect().centery
background. blit(text, textpos)
# Blit everything to the screen
screen. blit(background, (0, 0))
pygame. display. flip()
while True:
for event in pygame. event. get():
if event. type == pygame. QUIT:
quit()
if event. type == pygame. KEYDOWN:
if event. key==pygame. K_3:
snakes=3
start_game2(snakes)
elif event. key==pygame. K_4:
snakes=4
start_game2(snakes)
elif event. key==pygame. K_5:
snakes=5
start_game2(snakes)
elif event. key==pygame. K_6:
snakes=6
start_game2(snakes)
elif event. key==pygame. K_7:
snakes=7
start_game2(snakes)
elif event. key==pygame. K_8:
snakes=8
start_game2(snakes)
elif event. key==pygame. K_9:
snakes=9
start_game2(snakes)
def start_game2(sn):
# Initialise screen
pygame. init()
screen = pygame. display. set_mode((640,480))
pygame. display. set_caption("SNAKES")
# Fill background
background = pygame. Surface(screen. get_size())
background = background. convert()
background. fill((250, 250, 250))
# Display some text
font = pygame. font. Font(None, 36)
text = font. render(unicode("Выберите уровень игры: от 1 до 3 ", 'cp1251'), 1, (10, 10, 10))
textpos = text. get_rect()
textpos. centerx = background. get_rect().centerx
textpos. centery = background. get_rect().centery
background. blit(text, textpos)
# Blit everything to the screen
screen. blit(background, (0, 0))
pygame. display. flip()
while True:
################# ПРОВЕРЯЕМ РЕАКЦИЮ ПОЛЬЗОВАТЕЛЯ #######################
for event in pygame. event. get():
if event. type==pygame. QUIT:
quit()
elif event. type==pygame. KEYDOWN:
if event. key==pygame. K_1:
level=1
main(sn, level)
elif event. key==pygame. K_2:
level=2
main(sn, level)
elif event. key==pygame. K_3:
level=3
main(sn, level)
def main(sn, lv):
#------размеры экрана
screenH=480
screenW=640
screen = pygame. display. set_mode((640, 480))
pygame. display. set_caption("SNAKES")
background = image. load('kartinka. jpg')
screen. blit(background, (0,0))
x_vel, y_vel = 0.0, 0.0 #--переменные для координат лягушrки
screen. blit(pygame. image. load("lyag. gif").convert(),(x_vel, y_vel))
screen. blit(pygame. image. load("line1.jpg").convert(),(150,0))
display. update()
#--стартовые позиции змей в начале игры
zm=[]
zmey_count=sn
zc=(screen. get_height()-45-50)/(zmey_count+1)# расстояние между змеями
k=0 # номер змеи
while k <=zmey_count-1:
zmc=[(screen. get_width()-5+k*40), (45+k*zc)]# координаты х, у змей
zm. append(zmc)
k+=1
#----шаг смещения змеи за цикл
zm_step=0.6
#--координата линии защиты от змей
lineX=135
#--переменная используемая для ускорения
i=1
#---размеры тортика и шаг тортика за цикл
cakeH=35
cake_step=5+lv
#количество тортиков в запасе и израсходованных
cake_countTotal=25
cake_count=0
#---размеры змеи
zmH=40
zmW=79
t=[] #--списоk тортиков
while True:
for event in pygame. event. get():
if event. type == pygame. QUIT:
quit()
elif event. type == pygame. KEYDOWN:
#обрабатываем паузу
if event. key == pygame. K_PAUSE:
zm_step=0
cake_step=0
elif event. key == pygame. K_c:
zm_step=0.6
cake_step=3
elif event. key == pygame. K_n:
main(sn, lv)
#движение лягушки-----
elif event. key == pygame. K_UP:
y_vel -= 2
i+=1
elif event. key == pygame. K_DOWN:
y_vel += 2
i+=1
#-----стрельба пробелом-------
#список q с координатами по оси X - граница линии
#--- и Y - координата лягушки (левый вехний угол картинки)--
elif event. key == pygame. K_SPACE:
q=[lineX+15,y_vel]
t. append(q)
cake_count+=1
elif event. type == pygame. KEYUP:
i=1
#--пока клавиша K_DOWN или K_UP удерживается нажатой лягушка перемещается с ускорением
key=pygame. key. get_pressed()
if key[pygame. K_DOWN] :
i+=1
y_vel += 0.5*i
if key[pygame. K_UP]:
i+=1
y_vel -= 0.5*i
#---если координаты лягушки выходят за границы экраны - устанавливаем их так
#--- картинка лягушки не выходила за экран
if y_vel<=0:y_vel=0
if y_vel>=400:y_vel=400
#--обновляем фон
screen. blit(background, (0,0))
#-рисуем картинку игры-----
def printText(x):
font = pygame. font. Font(None, 56)
text = font. render(unicode(x,'cp1251'), 300, (220, 10, 10))
textpos = text. get_rect()
textpos. centerx = background. get_rect().centerx
textpos. centery = background. get_rect().centery
screen. blit(text, textpos)
def printCakeCount():
font =pygame. font. SysFont("Arial", 18, bold=False, italic=False)
text = font. render(unicode("У Вас ",'cp1251') +str(cake_countTotal-cake_count)+unicode(" тортиков",'cp1251'), 300, (0, 0, 255))
textpos = text. get_rect()
textpos. centerx = background. get_rect().centerx-250
textpos. centery = background. get_rect().centery+220
screen. blit(text, textpos)
def printMenu(x):
font =pygame. font. SysFont("Arial", 20, bold=False, italic=False)
text = font. render(unicode(x,'cp1251'), 300, (0, 0, 255))
textpos = text. get_rect()
textpos. centerx = background. get_rect().centerx+50
textpos. centery = background. get_rect().centery+220
screen. blit(text, textpos)
def drawZmey(x):
for q in zm:
screen. blit(pygame. image. load(x).convert(),(q))
def loose():
drawZmey("zmeyka_victory. gif")
printText("Вы проиграли ...")
def loose_cake():
drawZmey("zmeyka_victory. gif")
printText("0 тортиков")
def victory():
printText("ПОБЕДА !!!")
def zmeya1():
drawZmey("zmeyka. gif")
#-------уничтожим тортики которые улетели за экран
for qq in t:
if len(t)>0:
if qq[0]>=screen. get_width():
t. remove(qq)
#--
#-----убийство змей-начало
for qq in t:
if len(t)>0:
for ww in zm:
if qq[1]>=ww[1]-cakeH and qq[1]<=ww[1]+zmH and (qq[0]>=ww[0] and qq[0]<=ww[0]+zmW):
ww[0]=screen. get_width()+100
if ww[0]>screen. get_width():
t. remove(qq)
### ПРОВЕРЯЕМ РЕЗУЛЬТАТ ИГРЫ
sumzmX=0
for ww in zm:
if (ww[0]-screen. get_width())>0:sumzmX+=1
minusX=0
for ww in zm:
if (lineX-ww[0])>0 : minusX+=1
if sumzmX==len(zm):
victory()
elif minusX>0:
loose()
elif (cake_countTotal-cake_count)<=0:
loose_cake()
cake_countTotal=cake_count
########################## КОНЕЦ ПРОВЕРКИ РЕАКЦИИ ПОЛЬЗОВАТЕЛЯ ###################################
#-- если в ходе цикла ничто змеям не помешало, смещаем змей на zm_step
else:
for ww in zm:
ww[0]-=zm_step
zmeya1()
if len(t)>0:
for q in t:
screen. blit(pygame. image. load("cake. gif").convert(),(q[0],q[1]))
q[0]+=cake_step
#
screen. blit(pygame. image. load("lyag. gif").convert(),(x_vel, y_vel))
screen. blit(pygame. image. load("line1.jpg").convert(),(130,0))
printMenu(" \"n\"- новая игра ; \"pause\"- пауза ; \"c\"- продолжить")
printCakeCount()
display. update()
pygame. display. flip()
#---запускаем игру
start_game1()


