Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
#include
#include
char board[8][9]; bool flag[8][8]; void resetBoard(){ //Fungsi untuk reset board tiap case baru for(int i=0;i<8;i++){ for(int j=0;j<8;j++){ flag[i][j] = false; } } } bool checkEnemy(int x, int y){ //Fungsi cek itu musuh/bukan if(x>7 || x<0 || y>7 || y<0){ //Cek apakah keluar batas return false; } if(islower(board[x][y])){ //Kalo huruf kecil = musuh flag[x][y] = true; //Tandain boardnya yg ada musuh yg bisa kita serang return true; } return false; //return false kalo dia gk ada apa" } void knightMoves(int x, int y){ //Fungsi untuk kuda, ada 8 titik hitung manual jadinya langsung panggil func 8x //bawah checkEnemy(x+1, y-2); checkEnemy(x+1, y+2); checkEnemy(x+2, y-1); checkEnemy(x+2, y+1); //atas checkEnemy(x-1, y-2); checkEnemy(x-1, y+2); checkEnemy(x-2, y-1); checkEnemy(x-2, y+1); } void kingMoves(int x, int y){ //Fungsi untuk raja for(int i=x-1;i<=x+1;i++){ //Bentuk array 2d 3x3 dengan titik tengah posisi raja for(int j=y-1;j<=y+1;j++){ checkEnemy(i, j); } } } void bishopMoves(int x, int y){ for(int i=x-1, j=y-1;i>=0 && j>=0;i--,j--){ //Diagonal kiri atas if(isupper(board[i][j])){ //Break kalo ketemu temen, karna kehalang langsung gk bisa lanjut break; } if(checkEnemy(i, j)){ break; } } for(int i=x-1, j=y+1;i>=0 && j<8;i--,j++){ //Diagonal kanan atas if(isupper(board[i][j])){ break; } if(checkEnemy(i, j)){ break; } } for(int i=x+1, j=y-1;i<8 && j>=0;i++,j--){ //Diagonal kiri bawah if(isupper(board[i][j])){ break; } if(checkEnemy(i, j)){ break; } } for(int i=x+1, j=y+1;i<8 && j<8;i++,j++){ //Diagonal kanan bawah if(isupper(board[i][j])){ break; } if(checkEnemy(i, j)){ break; } } } void pawnMoves(int x, int y){ //Fungsi untuk pion checkEnemy(x-1, y-1); //Cek diagonal kiri atas checkEnemy(x-1, y+1); //Cek diagonal kanan atas } void rookMoves(int x, int y){ for(int i=y-1;i>=0;i--){ //Geser kiri ampe mentok if(isupper(board[x][i])){ break; } if(checkEnemy(x, i)){ break; } } for(int i=y+1;i<8;i++){ //Geser kanan ampe mentok if(isupper(board[x][i])){ break; } if(checkEnemy(x, i)){ break; } } for(int i=x-1;i>=0;i--){ //Geser atas ampe mentok if(isupper(board[i][y])){ break; } if(checkEnemy(i, y)){ break; } } for(int i=x+1;i<8;i++){ //Geser bawah mentok if(isupper(board[i][y])){ break; } if(checkEnemy(i, y)){ break; } } } void findEnemy(int x, int y, char k){ switch(k){ case 'P': pawnMoves(x, y); break; case 'R': rookMoves(x, y); break; case 'B': bishopMoves(x, y); break; case 'N': knightMoves(x, y); break; case 'Q': //Panggil 3 function karena movesnya si ratu terdiri atas move yg bisa dilakukan 3 karakter rookMoves(x, y); bishopMoves(x, y); break; case 'K': kingMoves(x, y); break; } } int main(){ int tc; scanf("%d", &tc); for(int i=1;i<=tc;i++){ bool check; resetBoard(); for(int j=0;j<8;j++){ //Isi array 2d dengan boardnya getchar(); scanf("%[^\n]", board[j]); } for(int j=0;j<8;j++){ //Loop array 2d buat nyari musuh for(int k=0;k<8;k++){ if(isupper(board[j][k])){ //Kalo ketemu huruf besar berarti punya kita, kita cek musuh apa aja yg bisa dimakan findEnemy(j, k, board[j][k]); //Sama karakter dititik itu } } } printf("Case #%d:\n", i); for(int j=0;j<8;j++){ // Loop untuk print keluar titik yang bisa diserang for(int k=0;k<8;k++){ if(flag[j][k]){ check = true; //check untuk nandain kalo ada yg bisa diserang, kalo ampe ujung gk ada berarti false, print -1 printf("%c %d\n", 65+k, 8-j); } } } if(!check){ printf("-1\n"); } } return 0; }
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)