Anda di halaman 1dari 10

TUGAS PEMROGAMAN

MEMBUAT GAME MENGGUNAKAN C++

Dosen Pengampu: Agus Purwanto


Nama:
Ahmad Wahyu Pangestu (312210319)
Nurul Asma Ash-shidiq (312210325)
Novelia Arum Puspita (312210329)
Kelas: TI.22.C

UNIVERSITAS PELITA BANGSA


Jl. Inspeksi Kalimalang No.9, Cibatu, Cikarang Selatan.,
Kabupaten Bekasi, Jawa Barat 17530
GAME PACMAN

A. ALUR PROGRAM

 GAME PACMAN 2022


 CARA BERMAIN GAME PACMAN2022
 A.TOMBOL ARAH UNTUK MEMINDAHKAN  PAHLAWAN ANDA
B. MAKAN TITIK TITIK YANG DI HASILKAN PEMAKAN UNTUK MENDAPATKAN POIN
C. JANGAN SAMPAI TERMAKAN OLEH PEMAKAN
 PIIHAN LEVEL
 JIKA TIDAK MEMIIH LEVEL, MAKA KELUAR DARI GAME
 JIKA YA MEMILIH LEVEL EASY MAKA LANGSUNG START GAME
 JIKA TIDAK LEVEL EASY, MAKA PILIH LEVEL HARD DAN LANGSUNG START GAME
 JIKA TIDAK LEVEL HARD, MAKA LEVEL NORMAL DAN LANGSUNG START GAME
 START GAME
 JIKA TERMAKAN OEH PEMAKAN
 JIKA YA TERMAKAN MAKA KAMU KALAH DAN PERHITUNGAN SCORE
 JIKA TIDAK TERMAKAN MAKA KAMU MENANG
 APA MAU MAIN LAGI?
 JIKA TIDAK MAKA LANGSUNG KELUAR DARI GAME
 JIKA IYA MAKA MEMULAI, ULANG LAGI DARI PILIHAN LEVEL
A. FLOWCHART GAME PACMAN
B. SOURCE CODE DAN COMMENT DARI GAME PACMAN

#include <iostream>// library


#include <stdio.h>//standart input output
#include <windows.h>//menampilkan perintah
#include <string> //menggunakan library string
#include <vector> //menggunakan library vector

using namespace std; // class std


char tmp_map[18][32]; // variabel untuk menampilkan map

char map[18][32] = {
"+#############################+",
"| |",
"| |",
"|## ########### ## #########|",
"| | |",
"| | |### | | | |",
"| | | | |### | | | |",
"| | #####| | | ## | |",
"| | |### | | |",
"| |##### ### ## |",
"| ###### ####### ###|",
"| |",
"|# ### #### ### #######|",
"| ###### |",
"| | | |",
"| | |########## |",
"| |",
"+#############################+"
};

void ShowMap() // untuk menampilkan map


for(int i = 0; i < 18; i++) { // pengulangan (interger i =
0,i lebih kecil dari 18,i++)
printf("%s\n",map[i] );//fungsi untuk menampilkan output ke
komputer(%s\n,melihat map variabel i)
}
}

void gotoxy( short x, short y ) // perintah atau fungsi untuk


menentukan letak output (jarak kecil x,jarak kecil y)
{
HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE) ;
//mengambil inputan keyboard sebagai output pada gerakan
COORD position = { x, y } ;

SetConsoleCursorPosition( hStdout, position ) ; //tetapkan


posisi kursor sebagai output
}

class kesatuan { // suatu tipe data yang didalamnya berisi data


( element variable ) dan sebuah fungsi
public://Sebuah class yang dapat diakses oleh class yang sama
bisa juga oleh turunannya
kesatuan ( int x, int y ){ //kesatuan (interger x,interger
y)
this ->x = x; // objek arrow x sama dengan x
this ->y = y; // objek arrow y sama dengan y
}

void move_x( int p ){ //pengulangan move_x (interger p)


if( map[y][x+p] == ' ' ) x += p; //jika map variabel
y, variabel x+p sama dengan '') x+samadengan p
}

void move_y( int p ){ //pengulangan move_x(interger p)


if( map[y+p][x] == ' ' ) y += p; //jika map variabel
y, variabel x+p sama dengan '') x+samadengan p
}

void move( int p, int q ){ //pengulangan move (interger p,


interger q)
x += p; //variabel x +sama dengan p
y += q;// variabel y+samadengan q
}

int get_x(){ return x; } // interger perintah variabel x


(){ return x
int get_y(){ return y; } // interger perintah variabel y
(){ return y

void draw( char p ){ // pengulangan draw ( tipe interger


p)
map[x][y] = p; //map variabel ,variabel y,sama
dengan p
gotoxy( x, y ); printf( "%c", p );//perintah untuk
meletakan output(x,y),fungsi untuk menampilkan ouput ke komputer
}

private: //Sebuah class yang hanya dapat diakses oleh class yang
sama.
int x; //interger x
int y;//interger y
};

struct walk { // tipe data bentukan yang terdiri dari kumpulan


tipe data laim berjalan
short walk_count; //jarak pendek untuk perhitungan jalan
short x; //jarak pendek x
short y;// jarak pendek y
short back; // jarak pendek kembali
};

struct target { //perkumpulan dari tipe data lain targer


short x; //jarak pendek x
short y; // jarak pendek y
};

vector<target> walk_queue;//meyimpan elemet data dari target dan


walk_queue

vector<walk> BFSArray; // meyimpan elemet array

void AddArray( int x, int y, int wc , int back ){ //pengulangan


array (interger x,y,wc,kembali)
if( tmp_map[y][x] == '#' || tmp_map[y][x] == '.' ){ //jika
temp_map variabel y dan x sama dengan #
tmp_map[y][x] = '#'; //temp_map variabel y dan x
sama dengan #
walk tmp;//berjalan temp
tmp.x = x; //temp di kali x sama dengan x
tmp.y = y; //temp dikali y samadengan y
tmp.walk_count = wc; //temp diakali perhitungan
berjalan sama dengan wc
tmp.back = back; //temp dikali back sama dengan
kembali
BFSArray.push_back( tmp );//array.push back (tmp)
}
}

void FindPath( int sx, int sy, int x, int y ){ //pengulangan


findpath(interger sx,interger sy,x,dan y)
memcpy( tmp_map, map, sizeof(map) ); //pengambalian
pointer (temp_map,map,sizeof(map) )
BFSArray.clear(); //arayy.selesai
walk tmp;//template berjalan
tmp.x = sx; //temp.x sama dengan sx
tmp.y = sy;//temp.y sama dengan sy
tmp.walk_count = 0; //temp.perhitugan berjalan dimulai
dari 0
tmp.back = -1; //temp.kembali sama denan min 1
BFSArray.push_back( tmp );//araay kembali push (template)

int i = 0; //tipe data i sama dengan 0


while( i < BFSArray.size() ){ //pengulangan yang belum
jelas nilainya ( i lebih kecil dari array.size() )
if( BFSArray[i].x == x && BFSArray[i].y == y ){
//jika(array variabel i x sama dengan x dan array variabel i,y
sama dengan y
walk_queue.clear(); //perhitungan berjalan
selesai
target tmp2;//target tempalte 2
while( BFSArray[i].walk_count != 0 ){
//pengulanan (array variabel i, perintah berhitung mulai dari 0
tmp2.x = BFSArray[i].x;//temp 2.x sama
dengan array variabel i.x
tmp2.y = BFSArray[i].y;// temp2.y
samadengan array variabel i.y
walk_queue.push_back( tmp2
);//perhitungan berjalan kembali(temp2)

i = BFSArray[i].back;//interger i sama
dengan array variabel i.kembali
}

break; //break satu line


}

AddArray( BFSArray[i].x+1, BFSArray[i].y,


BFSArray[i].walk_count+1, i );
AddArray( BFSArray[i].x-1, BFSArray[i].y,
BFSArray[i].walk_count+1, i );
AddArray( BFSArray[i].x, BFSArray[i].y+1,
BFSArray[i].walk_count+1, i );
AddArray( BFSArray[i].x, BFSArray[i].y-1,
BFSArray[i].walk_count+1, i );

i++; //increment
}

BFSArray.clear();//bersihkan/hapus array
}

int main() //tipe data atau deklarasi


{
bool running = true; //tipe data running sama dengan 1
int x = 15; // hero x =15
int y = 16; // hero y=16
int old_x;//interger x
int old_y;//interger y

int ex = 1; //interger ex samadengan 1


int ey = 1; // interger ey sama dengan 1

int pts = 0;//interger pts sama dengan 0

printf("INTRUKSI PERMAINAN :\n1.Tombol Panah untuk


memindahkan pahlawan Anda \n2.Makan titik-titik yang dihasilkan
oleh Pemakan untuk mendapatkan poin\n3.Jangan sampai tertangkap
oleh pemakan\n\n");
printf("H -> Hard\nN -> Normal\nE -> Easy\n\nInput : ");

char diffi;// tipe data diffi


int speedmod = 3; //interger speedmod atau kecepatan mood

cin >> diffi;//cetak ulang kata diffi

if( diffi == 'N' ){ //jika (diffi sama dengan N


speedmod = 2; // kecepatan mood 2
}else if( diffi == 'H' ){ //jika tidak(diffi sama dengan H
speedmod = 1; //KECEPATAN MOOD 1
}

system("cls");//system untuk membersihkan layar pada


program yang ingin di jalankan sehingga program dapat menetukan
saat menghapus data yang telah di jalankan
ShowMap();//perlihatkan map

gotoxy( x, y ); cout << "H";// untuk menampilkan output ke


layar (x,y) cetak kata H

int frame = 0; //interger frame sama dengan 0

FindPath( ex,ey,x,y ); //findpath (ex,ey,x,y

while( running ){ //pengulangan(running)


gotoxy( x, y ); cout << " ";//untuk menampilkan
output ke laptop (x,y) cetak kata E

old_x = x; //variabel old_x berisi x


old_y = y; //variabel old_y berisi y

if ( GetAsyncKeyState( VK_UP ) ){//jika pemain ke


arah atas dan mengenai tititk maka tambahkan skor, jika tidak
maka skor tidak bertambah
if( map[y-1][x] == '.' ){ y--; pts++; } else
if( map[y-1][x] == ' ' ) y--;
}
if ( GetAsyncKeyState( VK_DOWN ) ){ //jika pemain ke
arah bawah dan mengenai tititk maka tambahkan skor, jika tidak
maka skor tidak bertambah
if( map[y+1][x] == '.' ){ y++; pts++; } else
if( map[y+1][x] == ' ' ) y++;
}
if ( GetAsyncKeyState( VK_LEFT ) ){ //jika pemain ke
arah kiri dan mengenai tititk maka tambahkan skor, jika tidak
maka skor tidak bertambah
if( map[y][x-1] == '.' ){ x--; pts++; } else
if( map[y][x-1] == ' ' ) x--;
}
if ( GetAsyncKeyState( VK_RIGHT ) ){ //jika pemain
ke arah kanan dan mengenai tititk maka tambahkan skor, jika
tidak maka skor tidak bertambah
if( map[y][x+1] == '.' ){ x++; pts++; } else
if( map[y][x+1] == ' ' ) x++;
}

if( old_x != x || old_y != y ){ //jika ild_x bukan x


atau old_y bukan y, maka cari posisi yang tepat
FindPath( ex,ey,x,y );
}

gotoxy( x,y ); cout << "C"; // menampilkan gerakan


pemain dengan mengambil inputan dari posisi x dan y

map[ey][ex] = '.';
gotoxy( ex, ey ); cout << ".";

if( frame%speedmod == 0 && walk_queue.size() != 0 ){


ex = walk_queue.back().x; //memasukan inputan
berikutnya kedalam antrian x
ey = walk_queue.back().y; //memasukan inputan
berikutnya kedalam antrian y
walk_queue.pop_back(); // jalankan posisi
sesuai inputan antrian
}

gotoxy( ex, ey ); cout << ">"; // menampilkan


gerakan pemakan berdasarkan inputan dari ex dan ey

if( ex == x && ey == y ){ //jika posisi pemakan sama


dengan x dan y, maka permainan berhenti
break;
}

gotoxy( 32, 18 );
gotoxy( 32, 1 ); cout << pts;
Sleep( 100 ); //mode sleep selama 100 detik
frame++; //increment
}

system("cls");
printf("KAMU PECUNDANG DAN SCORE KAMU ADALAH: %i",
pts ); //menampilkan pesan apabila kalah
cin.get();

return 0;//selesai
}

Output :

Anda mungkin juga menyukai