Курсовая работа по дисциплине «Информатика»

на тему:

Игра на языке 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()