Sunday, 14 March 2021

Teori Komputasi & Implementasinya

 

Teori Komputasi & Implementasinya


Pengertian Komputasi

Komputasi sebetulnya bisa diartikan sebagai cara untuk menemukan pemecahan masalah dari data input dengan menggunakan suatu algoritma. Hal ini ialah apa yang disebut dengan teori komputasi, suatu sub-bidang dari ilmu komputer dan matematika. Selama ribuan tahun, perhitungan dan komputasi umumnya dilakukan dengan menggunakanpena dan kertas, atau kapur dan batu tulis, atau dikerjakan secara mental, kadang-kadang dengan bantuan suatu tabel. Namun sekarang, kebanyakan komputasi telah dilakukan dengan menggunakan komputer.

Teori komputasi 

Adalah cabang ilmu komputer dan matematika yang membahas apakah dan bagaimanakah suatu masalah dapat dipecahkan pada model komputasi, menggunakan algoritma. Bidang ilmu ini terutama membahas hal terkait komputabilitas dan kompleksitas, dalam kaitannya dengan formalisme komputasi.

Komputasi bisa diartikan sebagai cara untuk menemukan pemecahan masalah dari data input dengan menggunakan suatu algoritma. Hal ini ialah apa yang disebut dengan teori komputasi, suatu sub-bidang dari ilmu komputer dan matematika. Selama ribuan tahun, perhitungan dan komputasi umumnya dilakukan dengan menggunakan pena dan kertas, atau kapur dan batu tulis, atau dikerjakan secara mental, kadang-kadang dengan bantuan suatu tabel. Namun sekarang, kebanyakan komputasi telah dilakukan dengan menggunakan komputer.

Secara umum iIlmu komputasi adalah bidang ilmu yang mempunyai perhatian pada penyusunan model matematika dan teknik penyelesaian numerik serta penggunaan komputer untuk menganalisis dan memecahkan masalah-masalah ilmu (sains). Dalam penggunaan praktis, biasanya berupa penerapan simulasi komputer atau berbagai bentuk komputasi lainnya untuk menyelesaikan masalah-masalah dalam berbagai bidang keilmuan, tetapi dalam perkembangannya digunakan juga untuk menemukan prinsip-prinsip baru yang mendasar dalam ilmu.

Bidang ini berbeda dengan ilmu komputer (computer science), yang mengkaji komputasi, komputer dan pemrosesan informasi. Bidang ini juga berbeda dengan teori dan percobaan sebagai bentuk tradisional dari ilmu dan kerja keilmuan. Dalam ilmu alam, pendekatan ilmu komputasi dapat memberikan berbagai pemahaman baru, melalui penerapan model-model matematika dalam program komputer berdasarkan landasan teori yang telah berkembang, untuk menyelesaikan masalah-masalah nyata dalam ilmu tersebut.


Komputasi juga sering diartikan sebagai sebuah komputer secara fisik. Sebagai contoh dari sistem fisik yaitu komputer digital, komputer quantum, komputer penganalisa DNA, dan komputer molekular. Sudut pandang ini dipelajari di cabang ilmu teori fisik yang disebut Physic of Computation. Bahkan ada sudut pandang yang lebih radikal berbasis dalil Digital Physic yang menyatakan bahwa evolusi alam semesta itu sendiri adalah sebuah proses komputasi – disebut Pancomputationalism.

Teori komputasi dibagi lagi menjadi 3 ranting :
  1. Teori Otomata (automata theory)
  2. Teori Komputabilitas (computability theory)
  3. Teori Kompleksitas (computational complexity theory)

Teori komputabilitas bertujuan untuk memeriksa apakah persoalan komputasi dapat dipecahkan pada suatu model komputasi teoritis. Dengan kata lain, teori komputabilitas mengklasifikasikan persoalan sebagai dapat dipecahkan (solvable) atau persoalan yang tidak dapat dipecahkan (unsolvable). Teori kompleksitas bertujuan untuk mengkaji kebutuhan waktu dan ruang untuk memecahkan persoalan yang diselesaikan dengan pendekatan yang berbeda-beda.

Dengan kata lain, teori kompleksitas mengklasifikasikan persoalan sebagai persoalan mudah (easy) atau persoalan sukar (hard). Teori komputabilitas memperkenalkan beberapa konsep yang digunakan di dalam teori kompleksitas. Teori otomata mengacu pada definisi dan sifat-sifat model komputasi. Di dalam teori komputasi, model komputasi yang sering dipakai adalah Mesin Turing.
Beberapa model komputasi :
  1. Finite State Automata (FSA)/Finite State Machine (FSM)
  2. Push Down Automata (PDA)
  3. Mesin Turing (Turing Machine) atau TM

Komputasi Modern

Komputasi modern bisa disebut sebuah konsep sistem yang menerima intruksi-intruksi dan menyimpannya dalam sebuah memory, memory disini bisa juga dari memory komputer. Oleh karena pada saat ini kita melakukan komputasi menggunakan komputer maka bisa dibilang komputer merupakan sebuah komputasi modern. Konsep ini pertama kali digagasi oleh John Von Neumann (1903-1957). Dalam kerjanya komputasi modern menghitung dan mencari solusi dari masalah yang ada, dan perhitungan yang dilakukan itu meliputi:
  1. Akurasi
  2. Kecepatan
  3. Problem Volume Besar
  4. Modelling
  5. Kompleksitas

Komputasi modern terbagi menjadi tiga macam, yaitu :
  1. Mobile Computing atau komputasi bergerak adalah kemajuan teknologi komputer sehingga dapat berkomunikasi menggunakan jaringan tanpa kabel dan mudah dibawa dan mudah di pindah – pindahkan. Contoh dari perangkat komputasi bergerak, seperti smartphone, GPS, dll.
  2. Grid Computing atau komputasi grid menggunakan komputer yang terpisah oleh geografis, didistribusikan dan terhubung oleh jaringan untuk menyelesaikan masalah komputasi skala besar, ada beberapa daftar yang dapat digunakan untuk mengenali sistem komputasi grid, adalah:
    • Sistem untuk koordinat sumber daya komputasi tidak dibawah kendali pusat. 
    • Sistem menggunakan standart dan protocol yang terbuka. 
    • Sistem mencoba mencapai kualitas pelayanan yang canggih, yang lebih baik diatas kualitas komponen individu pelayanan komputasi grid.
  3. Cloud Computing atau Komputasi cloud merupakan gaya komputasi yang terukur dinamis dan sumber daya virtual yang sering menyediakan layanan melalui internet, Komputasi cloud menggambarkan pelengkap baru, konsumsi, dan layanan IT berbasis model dalam internet dan biasanya melibatkan ketentuan dari keterukuran dinamis dan sumber daya virtual yang sering menyediakan layanan melalui internet.
Perbedaan diantara ketigannya adalah:
Komputasi Mobile menggunakan teknologi komputer yang bekerja seperti handphone, sedangkan komputasi grid dan cloud menggunakan komputer. Biaya untuk tenaga komputasi mobile lebih mahal dibandingkan dengan komputasi grid dan cloud. Komputasi mobile tidak membutuhkan tempat dan mudah dibawa kemana – mana, sedangkan grid dan cloud membutuhkan tempat yang khusus.

Untuk komputasi mobile, proses tergantung si pengguna. Komputasi grid proses tergantung pengguna mendapatkan server atau tidak, dan komputasi cloud prosesnya membutuhkan jaringan internet sebagai penghubungnya.

Implementasi

Komputasi Kimia

Komputasi kimia adalah cabang dari kimia yang menggunakan simulasi komputer untuk membantu dalam memecahkan masalah kimia. Ilmu ini menggunakan metode teori kimia, digabungkan dengan program komputer yang efisien, untuk menghitung struktur dan susunan dari molekul dan zat.

REPORT THIS AD

Penemuan komputasi kimia berawal dari sebuah gagasan teoritis pada perhitungan kimia yang dilakukan oleh Walter Heitler dan Fritz London pada 1927. Penggunaan komputer pada bidang kimia baru dapat diwujudkan pada beberapa tahun setelahnya, tepatnya 1940.

 

Komputasi Geologi

Implementasi komputasi modern dalam bidang Geologi adalah GIS.  Geographic information system (GIS) atau Sistem Informasi Berbasis Pemetaan dan Geografi adalah sebuah alat bantu manajemen berupa informasi berbantuan komputer yang berkait erat dengan sistem pemetaan dan analisis terhadap segala sesuatu serta peristiwa-peristiwa yang terjadi di muka bumi. GIS lebih dikenal sebagai software tools, misalnya: ArcInfo, MapInfo, AutoCadMap, Grass, dan masih banyak lagi. Dengan tools yang sama maka GIS berkaitan dengan proses dan presentasi peta-peta skala kecil (peta LandUse, Kehutanan), sedangkan LIS berkaitan dengan peta-petaskala besar, yaitu peta bidang-bidang tanah (land parcels).

 

Komputasi Fisika

Implementasi komputasi moderndi bidang fisika ada Computational Physics yang mempelajari suatu gabungan antara Fisika,Komputer Sain dan Matematika Terapan untuk memberikan solusi pada “Kejadian dan masalah yang komplek pada dunia nyata” baik dengan menggunakan simulasi juga penggunaan algoritma yang tepat.

Pemahaman fisika pada teori, experimen, dan komputasi haruslah sebanding, agar dihasilkan solusi numerik dan visualizasi /pemodelan yang tepat untuk memahami masalah Fisika. Untuk melakukan perkerjaan seperti evaluasi integral,penyelesaian persamaan differensial, penyelesaian persamaan simultans, mem-plot suatu fungsi/data, membuat pengembangan suatu seri fungsi, menemukan akar persamaan dan bekerja dengan bilangan komplek yang menjadi tujuan penerapan fisika komputasi.

Banyak perangkat lunak ataupun bahasa yang digunakan, baik MatLab, Visual Basic, Fortran,Open Source Physics (OSP), Labview, Mathematica, dan lain sebagainya digunakan untuk pemahaman dan pencarian solusi numerik dari masalah-masalah pada Fisika komputasi. Suatu yang menjadi fokus perhatian kita disini adalah penggunaan visual basicsebagai alat bantu dalam pembelajaran dan pencarian solusi Fisika komputasi.

 

Komputasi Matematika

Implementasi komputasi modern di bidang matematika ada numerical analysis yaitu sebuah algoritma dipakai untuk menganalisa masalah – masalah matematika. Bidang analisis numerik sudah sudah dikembangkan berabad-abad sebelum penemuan komputer modern. Interpolasi linear sudah digunakan lebih dari 2000 tahun yang lalu. Banyak matematikawan besar dari masa lalu disibukkan oleh analisis numerik, seperti yang terlihat jelas dari nama algoritma penting seperti metode Newton,interpolasi polinomial Lagrange, eliminasi Gauss, atau metode Euler. Buku-buku besar berisi rumus dan tabel data seperti interpolasi titik dan koefisien fungsi diciptakan untuk memudahkan perhitungan tangan. Dengan menggunakan tabel ini (seringkali menampilkan perhitungan sampai 16 angka desimal atau lebih untuk beberapa fungsi), kita bisa melihat nilai-nilai untuk diisikan ke dalam rumus yang diberikan dan mencapai perkiraan numeris sangat baik untuk beberapa fungsi. Karya utama dalam bidang ini adalah penerbitan NIST yang disunting oleh Abramovich dan Stegun, sebuah buku setebal 1000 halaman lebih. Buku ini berisi banyak sekali rumus yang umum digunakan dan fungsi dan nilai-nilainya di banyak titik. Nilai f-nilai fungsi tersebut tidak lagi terlalu berguna ketika komputer tersedia, namun senarai rumus masih mungkin sangat berguna.Kalkulator mekanik juga dikembangkan sebagai alat untuk perhitungan tangan. Kalkulator ini berevolusi menjadi komputer elektronik pada tahun 1940. Kemudian ditemukan bahwa komputer juga berguna untuk tujuan administratif. Tetapi penemuan komputer juga mempengaruhi bidang analisis numerik, karena memungkinkan dilakukannya perhitungan yang lebih panjang dan rumit.

 

Komputasi Biologi

Dalam implementasi komputasi modern di bidang biologi terdapat Bioinformatika, sesuai dengan asal katanya yaitu “bio” dan “informatika”, adalah gabungan antara ilmu biologi dan ilmu teknik informasi (TI). Pada umumnya, Bioinformatika didefenisikan sebagai aplikasi dari alat komputasi dan analisa untuk menangkap dan menginterpretasikan data-data biologi. Ilmu ini merupakan ilmu baru yang yang merangkup berbagai disiplin ilmu termasuk ilmu komputer, matematika dan fisika, biologi, dan ilmu kedokteran, dimana kesemuanya saling menunjang dan saling bermanfaat satu sama lainnya.

Istilah bioinformatics mulai dikemukakan pada pertengahan era 1980-an untuk mengacu pada penerapan komputer dalam biologi. Namun demikian, penerapan bidang-bidang dalam bioinformatika (seperti pembuatan basis data dan pengembangan algoritma untuk analisis sekuens biologis) sudah dilakukan sejak tahun 1960-an.

Ilmu bioinformatika lahir atas insiatif para ahli ilmu komputer berdasarkan artificial intelligence. Mereka berpikir bahwa semua gejala yang ada di alam ini bisa diuat secara artificial melalui simulasi dari gejala-gejala tersebut. Untuk mewujudkan hal ini diperlukan data-data yang yang menjadi kunci penentu tindak-tanduk gejala alam tersebut, yaitu gen yang meliputi DNA atau RNA. Bioinformatika ini penting untuk manajemen data-data dari dunia biologi dan kedokteran modern. Perangkat utama Bioinformatika adalah program software dan didukung oleh kesediaan internet.

 

Komputasi Ekonomi

Implementasi pada ilmu pengetahuan ekonomi adalah mempelajari agent-based computational modeling, computational econometrics dan statistika, komputasi keuangan, computational modeling of dynamic macro economic systems, pemrograman yang didesain khusus untuk komputasi ekonomi, dan pengembangan alat bantu dalam pendidikan komputasi ekonomi. Karena dibidang ekonomi pasti memiliki permasalahan yang harus dipecahkan oleh algoritma contohnya adalah memecahkan teori statistika untuk memecahkan permasalahan keuangan.

Salah satu implementasi komputasi modern pada bidang ekonomi yaitu dengan adanya situs web iklan baris  yang difokuskan untuk membeli dan menjual produk serta jasa secara real time. Iklan baris sendiri adalah salah satu cara promosi barang dan jasa yang umumnya ditemukan di koran. Cara ini merupakan pengembangan dari promosi iklan yang mengutamakan daya tarik dengan gambar dan dengan informasi yang lebih lengkap dan terperinci dalam bentuk teks.Iklan baris mengutamakan informasi yang paling inti yang perlu diketahui oleh peminatnya.


Sumber :

https://rizki08.wordpress.com/2014/05/09/teori-komputasi-modern-dan-implementasi-di-bidang-fisika-biologi-matematika-ekonomi-dan-geologi/

http://ikhsanturion.blogspot.co.id/2016/03/soft-skill-pengantar-komputasi-modern.html

https://avievarifian.wordpress.com/2016/05/04/implementasi-komputasi-modern-di-bidang-ekonomi/

https://deadydiedy.wordpress.com/2015/04/05/komputasi-teori-komputasi/


https://hafidhadinegoro.wordpress.com/2016/03/24/teori-komputasi-implementasi/

Saturday, 24 October 2020

Tips membuat company profile yang menarik!

 



Tips Penting dalam Membuat Company Profile

Membuat company profile itu mudah loh, kalau Anda membaca tips jitu yang kami buat di bawah ini. Meski tidak ada patokan baku yang bisa digunakan, tapi percaya ‘deh’ kalau tips-tips ini bisa meningkatkan nilai jual perusahaan Anda.

Buat company profile ‘sesederhana’ mungkin. Sederhana yang kami tuliskan disini bukan berarti membuat company profile dengan font Times New Roman ukuran 12, berwarna hitam dan berlatar belakang putih.

Justru Anda bisa membuat company profile sekreatif mungkin sesuai dengan tim yang Anda punya, tentu menjadi keuntungan bila di dalam tim yang Anda miliki terdapat orang yang jago mendesain sesuatu.

Meski demikian tetap ingat bahwa buatlah company profile sesederhana namun sepadat mungkin. Intinya Anda wajib bisa memasukkan sebanyak-banyaknya informasi penting mengenai perusahaanmu ke dalam company profile namun tanpa membuatnya terlihat membosankan.

Artinya dibutuhkan seorang copywriter dan desainer yang handal dalam membuat company profile perusahaan Anda ini. Kalau tidak ada? Belajar saja, toh banyak video-video tutorial nya di Youtube.

Menentukan target pasar dengan benar. Kesalahan yang seringkali dilakukan oleh orang-orang yang membuat company profile adalah tidak menentukan target pasar mereka dengan benar. Hal ini tentu membuat isi yang ditulis di dalamnya menjadi tidak relevan terhadap para pembaca.

Anda yang memiliki target pasar anak muda misalnya, tentu bisa menyesuaikan desain dan konten dari company profile yang Anda punya agar lebih berwarna, lebih simpel, dan menggunakan banyak gambar misalnya.

Sementara Anda yang memiliki target pasar orang-orang tua hingga lanjut usia misalnya, bisa pula menyesuaikan desain dari company profile yang Anda punya agar lebih ‘padat’ dengan tulisan dan informasi, namun tetap terbaca dengan baik.

Platform yang tepat adalah kunci. Setelah bisa membuat desain dan konten company profile yang sesuai dengan target pasar, tips dari suksesnya company profile adalah platform bermain yang tepat.

Di era informatika macam sekarang ini misalnya, tentu tidak tepat apabila Anda masih membuat company profile cetak dan disebarkan manual secara luas. Tentu Anda yang menyasar target anak muda malah akan kehilangan mereka, karena anak muda cenderung menyukai informasi yang didapat dari gadget-gadget mereka.

Sementara Anda yang memiliki target pasar lansia misalnya, tentu tidak tepat pula bila justru memutuskan untuk membuat company profile secara online saja misalnya. Tentu para lansia yang jarang bermain gadget tidak akan terpapar dengan company profile Anda.

Tips mudah untuk mengakali beberapa permasalahan ini adalah dengan membuat company profile sekaligus di banyak platform. Proporsinya tinggal Anda sesuaikan dengan target pasar yang Anda punya, perbanyak proporsi platform dimana target pasar Anda ada disana.

Value terkadang menjual lebih. Banyak yang beranggapan nilai, visi, dan misi merupakan hal yang tidak terlalu penting di dalam pembuatan company profile. Tapi tahukah Anda bahwa kenyataannya justru terbalik.

Karena ternyata ada banyak konsumen yang justru terpikat terhadap suatu produk karena kesamaan nilai serta visi dan misi. Banyak orang yang memutuskan untuk memakai suatu brand dibanding brand lain hanya karena kesamaan nilai.

Bisa dibilang di bagian value serta visi dan misi, jangan hanya membuatnya tampak seolah perusahaan Anda merupakan perusahaan yang tanpa cacat dan selalu memiliki attitude positif. Namun buatlah agar perusahaan Anda benar-benar menjadi perusahaan yang demikian.

Tips lain terkait value dan konten adalah membuat company profile dengan banyak kalimat-kalimat positif. Cara ini merupakan salah satu cara marketing yang bisa kau terapkan di dalam pembuatan company profile yang Anda punya loh.

Kreativitas memang mahal. Banyak di luaran sana perusahaan-perusahaan yang mendambakan memiliki image brand yang baik, dengan produk ciamik serta company profile yang memanjakan mata, namun enggan mengeluarkan uang lebih.

Percayalah bahwa desain-desain produk dan company profile yang seliweran di internet, yang tampak memanjakan mata merupakan buah-buah tangan dari desainer grafis yang dibayar cukup mahal.

Kalau mengutip istilah zaman dulu sih ‘ada uang ada barang’. Jadi jangan pelit-pelit untuk menganggarkan sejumlah uang yang cukup besar untuk proses kreatif yang nantinya bakal bermanfaat untuk perusahaan Anda sendiri ini loh.

Informasi dasar wajib dimasukkan. Sebagai salah satu fungsi utama dari pembuatan company profile, informasi dasar merupakan informasi yang harus Anda masukkan ke dalam company profile yang Anda punya.

Selain itu tips penting dari kami yang harus Anda ingat adalah bahwa semakin transparan semakin menarik. Misalnya Anda yang berani menyajikan data-data berupa angka penjualan lengkap dengan keuntungan dan keuangan lainnya, tentu akan menambah nilai dari company profile tersebut.

Update update dan update. Seiring dengan berjalannya perusahaan yang Anda dirikan, tentu akan ada banyak perubahan di sana dan di sini. Hal ini tentu saja bisa membuat company profile yang sebelumnya Anda buat menjadi tidak relevan lagi.

Disinilah fungsi update akan bisa bermanfaat. Dengan rajin-rajin memperbarui company profile, tentu akan mengurangi rasa heran orang apabila ada misinformasi yang masih tercantum di dalamnya.

Thursday, 1 October 2020

review singkat PT. Softnet indonesia

 PT. Softnet indonesia

 

- profil perusahaan

 

Berdiri sejak 2010 yang bergerak di bidang solution services

Yang mencakup dari security services hingga big data services.

 

- produk perusahaan

 


 

- lokasi perusahaan

 

Dipo Tower - 12th Floor

Jl. Gatot Subroto Kav. 51 - 52

Jakarta 10260, Indonesia

 

Phone: +6221-2962 1234

Fax: +6221-2962 1235

 

- klien perusahaan

 


 

- review singkat

 

Memiliki 5 jenis services yang akan berguna untuk mengatasi masalah masalah yang bersangkutan dengan IT, adapun jenis services nya adalah sebagai berikut:

1. plan, menyediakan jasa perencanaan desain dan proposal untuk berbagai jenis kebutuhan

2. Implementasi, menyediakan jasa untuk mengaplikasikan solusi upgrade secara detail

3. Operasi, menyediakan jasa untuk mengoperasikan system yang perlu di monitoring

4. Retain,untuk memenuhi standar operasi dan service level agreement

5. Assist, untuk mendevelop skill internal suatu perusahaan dengan solusi yang telah di upgrade.

 

 

Friday, 10 July 2020

PONG (ptg4)

                                                                      PONG



Pong adalah permainan video generasi pertama yang dirilis sebagai permainan arkade yang dioperasikan dengan koin yang dikembangkan oleh Atari Inc. pada tanggal 29 November, 1972.Pong didasari dari permainan atau olahraga tenis meja (Ping pong), nama permainan ini berasal dari suara yang dihasilkan ketika memukul bola ping pong.Kata Pong telah didaftarkan sebagai merek dari Atari Interactive.

berikut adalah listing programnya

class pong.java

package pong;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;

import javax.swing.JFrame;
import javax.swing.Timer;

public class Pong implements ActionListener, KeyListener
{

public static Pong pong;

public int width = 700, height = 700;

public Renderer renderer;

public Paddle player1;

public Paddle player2;

public Ball ball;

public boolean bot = false, selectingDifficulty;

public boolean w, s, up, down;

public int gameStatus = 0, scoreLimit = 7, playerWon; //0 = Menu, 1 = Paused, 2 = Playing, 3 = Over

public int botDifficulty, botMoves, botCooldown = 0;

public Random random;

public JFrame jframe;

public Pong()
{
Timer timer = new Timer(20, this);
random = new Random();

jframe = new JFrame("Pong");

renderer = new Renderer();

jframe.setSize(width + 15, height + 35);
jframe.setVisible(true);
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jframe.add(renderer);
jframe.addKeyListener(this);

timer.start();
}

public void start()
{
gameStatus = 2;
player1 = new Paddle(this, 1);
player2 = new Paddle(this, 2);
ball = new Ball(this);
}

public void update()
{
if (player1.score >= scoreLimit)
{
playerWon = 1;
gameStatus = 3;
}

if (player2.score >= scoreLimit)
{
gameStatus = 3;
playerWon = 2;
}

if (w)
{
player1.move(true);
}
if (s)
{
player1.move(false);
}

if (!bot)
{
if (up)
{
player2.move(true);
}
if (down)
{
player2.move(false);
}
}
else
{
if (botCooldown > 0)
{
botCooldown--;

if (botCooldown == 0)
{
botMoves = 0;
}
}

if (botMoves < 10)
{
if (player2.y + player2.height / 2 < ball.y)
{
player2.move(false);
botMoves++;
}

if (player2.y + player2.height / 2 > ball.y)
{
player2.move(true);
botMoves++;
}

if (botDifficulty == 0)
{
botCooldown = 20;
}
if (botDifficulty == 1)
{
botCooldown = 15;
}
if (botDifficulty == 2)
{
botCooldown = 10;
}
}
}

ball.update(player1, player2);
}

public void render(Graphics2D g)
{
g.setColor(Color.BLACK);
g.fillRect(0, 0, width, height);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

if (gameStatus == 0)
{
g.setColor(Color.WHITE);
g.setFont(new Font("Arial", 1, 50));

g.drawString("PONG", width / 2 - 75, 50);

if (!selectingDifficulty)
{
g.setFont(new Font("Arial", 1, 30));

g.drawString("Press Space to Play", width / 2 - 150, height / 2 - 25);
g.drawString("Press Shift to Play with Bot", width / 2 - 200, height / 2 + 25);
g.drawString("<< Score Limit: " + scoreLimit + " >>", width / 2 - 150, height / 2 + 75);
}
}

if (selectingDifficulty)
{
String string = botDifficulty == 0 ? "Easy" : (botDifficulty == 1 ? "Medium" : "Hard");

g.setFont(new Font("Arial", 1, 30));

g.drawString("<< Bot Difficulty: " + string + " >>", width / 2 - 180, height / 2 - 25);
g.drawString("Press Space to Play", width / 2 - 150, height / 2 + 25);
}

if (gameStatus == 1)
{
g.setColor(Color.WHITE);
g.setFont(new Font("Arial", 1, 50));
g.drawString("PAUSED", width / 2 - 103, height / 2 - 25);
}

if (gameStatus == 1 || gameStatus == 2)
{
g.setColor(Color.WHITE);

g.setStroke(new BasicStroke(5f));

g.drawLine(width / 2, 0, width / 2, height);

g.setStroke(new BasicStroke(2f));

g.drawOval(width / 2 - 150, height / 2 - 150, 300, 300);

g.setFont(new Font("Arial", 1, 50));

g.drawString(String.valueOf(player1.score), width / 2 - 90, 50);
g.drawString(String.valueOf(player2.score), width / 2 + 65, 50);

player1.render(g);
player2.render(g);
ball.render(g);
}

if (gameStatus == 3)
{
g.setColor(Color.WHITE);
g.setFont(new Font("Arial", 1, 50));

g.drawString("PONG", width / 2 - 75, 50);

if (bot && playerWon == 2)
{
g.drawString("The Bot Wins!", width / 2 - 170, 200);
}
else
{
g.drawString("Player " + playerWon + " Wins!", width / 2 - 165, 200);
}

g.setFont(new Font("Arial", 1, 30));

g.drawString("Press Space to Play Again", width / 2 - 185, height / 2 - 25);
g.drawString("Press ESC for Menu", width / 2 - 140, height / 2 + 25);
}
}

@Override
public void actionPerformed(ActionEvent e)
{
if (gameStatus == 2)
{
update();
}

renderer.repaint();
}

public static void main(String[] args)
{
pong = new Pong();
}

@Override
public void keyPressed(KeyEvent e)
{
int id = e.getKeyCode();

if (id == KeyEvent.VK_W)
{
w = true;
}
else if (id == KeyEvent.VK_S)
{
s = true;
}
else if (id == KeyEvent.VK_UP)
{
up = true;
}
else if (id == KeyEvent.VK_DOWN)
{
down = true;
}
else if (id == KeyEvent.VK_RIGHT)
{
if (selectingDifficulty)
{
if (botDifficulty < 2)
{
botDifficulty++;
}
else
{
botDifficulty = 0;
}
}
else if (gameStatus == 0)
{
scoreLimit++;
}
}
else if (id == KeyEvent.VK_LEFT)
{
if (selectingDifficulty)
{
if (botDifficulty > 0)
{
botDifficulty--;
}
else
{
botDifficulty = 2;
}
}
else if (gameStatus == 0 && scoreLimit > 1)
{
scoreLimit--;
}
}
else if (id == KeyEvent.VK_ESCAPE && (gameStatus == 2 || gameStatus == 3))
{
gameStatus = 0;
}
else if (id == KeyEvent.VK_SHIFT && gameStatus == 0)
{
bot = true;
selectingDifficulty = true;
}
else if (id == KeyEvent.VK_SPACE)
{
if (gameStatus == 0 || gameStatus == 3)
{
if (!selectingDifficulty)
{
bot = false;
}
else
{
selectingDifficulty = false;
}

start();
}
else if (gameStatus == 1)
{
gameStatus = 2;
}
else if (gameStatus == 2)
{
gameStatus = 1;
}
}
}

@Override
public void keyReleased(KeyEvent e)
{
int id = e.getKeyCode();

if (id == KeyEvent.VK_W)
{
w = false;
}
else if (id == KeyEvent.VK_S)
{
s = false;
}
else if (id == KeyEvent.VK_UP)
{
up = false;
}
else if (id == KeyEvent.VK_DOWN)
{
down = false;
}
}

@Override
public void keyTyped(KeyEvent e)
{

}
}

class paddle.java
package pong;

import java.awt.Color;
import java.awt.Graphics;

public class Paddle
{

public int paddleNumber;

public int x, y, width = 50, height = 250;

public int score;

public Paddle(Pong pong, int paddleNumber)
{
this.paddleNumber = paddleNumber;

if (paddleNumber == 1)
{
this.x = 0;
}

if (paddleNumber == 2)
{
this.x = pong.width - width;
}

this.y = pong.height / 2 - this.height / 2;
}

public void render(Graphics g)
{
g.setColor(Color.WHITE);
g.fillRect(x, y, width, height);
}

public void move(boolean up)
{
int speed = 15;

if (up)
{
if (y - speed > 0)
{
y -= speed;
}
else
{
y = 0;
}
}
else
{
if (y + height + speed < Pong.pong.height)
{
y += speed;
}
else
{
y = Pong.pong.height - height;
}
}
}

}

class ball.java

package pong;

import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;

public class Ball
{

public int x, y, width = 25, height = 25;

public int motionX, motionY;

public Random random;

private Pong pong;

public int amountOfHits;

public Ball(Pong pong)
{
this.pong = pong;

this.random = new Random();

spawn();
}

public void update(Paddle paddle1, Paddle paddle2)
{
int speed = 5;

this.x += motionX * speed;
this.y += motionY * speed;

if (this.y + height - motionY > pong.height || this.y + motionY < 0)
{
if (this.motionY < 0)
{
this.y = 0;
this.motionY = random.nextInt(4);

if (motionY == 0)
{
motionY = 1;
}
}
else
{
this.motionY = -random.nextInt(4);
this.y = pong.height - height;

if (motionY == 0)
{
motionY = -1;
}
}
}

if (checkCollision(paddle1) == 1)
{
this.motionX = 1 + (amountOfHits / 5);
this.motionY = -2 + random.nextInt(4);

if (motionY == 0)
{
motionY = 1;
}

amountOfHits++;
}
else if (checkCollision(paddle2) == 1)
{
this.motionX = -1 - (amountOfHits / 5);
this.motionY = -2 + random.nextInt(4);

if (motionY == 0)
{
motionY = 1;
}

amountOfHits++;
}

if (checkCollision(paddle1) == 2)
{
paddle2.score++;
spawn();
}
else if (checkCollision(paddle2) == 2)
{
paddle1.score++;
spawn();
}
}

public void spawn()
{
this.amountOfHits = 0;
this.x = pong.width / 2 - this.width / 2;
this.y = pong.height / 2 - this.height / 2;

this.motionY = -2 + random.nextInt(4);

if (motionY == 0)
{
motionY = 1;
}

if (random.nextBoolean())
{
motionX = 1;
}
else
{
motionX = -1;
}
}

public int checkCollision(Paddle paddle)
{
if (this.x < paddle.x + paddle.width && this.x + width > paddle.x && this.y < paddle.y + paddle.height && this.y + height > paddle.y)
{
return 1; //bounce
}
else if ((paddle.x > x && paddle.paddleNumber == 1) || (paddle.x < x - width && paddle.paddleNumber == 2))
{
return 2; //score
}

return 0; //nothing
}

public void render(Graphics g)
{
g.setColor(Color.WHITE);
g.fillOval(x, y, width, height);
}

}

class renderer.java

package pong;

import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JPanel;

public class Renderer extends JPanel
{

private static final long serialVersionUID = 1L;

@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);

Pong.pong.render((Graphics2D) g);
}

}


berikut adalah contoh gameplaynya






Saturday, 21 March 2020