일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 자바 #웹자바 #webJava #java #코딩 #코딩초보 #ojdbc #서블릿 #자바서블릿 #javaServelet #servelet #httpServlet
- union #sql99 #외부조인 #오라클조인 #sql조인 #자체조인 #비등가조인 #비등가조인 #테이블복사 #오라클테이블 #null인데이터출력
- 갤러리제작 #갤러리만들기 #jsp갤러리 #jsp게시판 #jsp프로그래밍 #jsp웹프로그래밍 #jsp웹 #jsp모델1방식 #사진업로드 #jsp사진업로드 #jdbc6 #jdbc드라이버다운 #jdbc드라이버무료다운
- ORACLE #TIGER #SCOTT #SCOTT계정 #오라클학습계정 #프로그래밍 #SQL #SQLORACLE #오라클 #오라클연습 #오라클연습계정 #오라클연습문제 #WHERE절 #오라클조건절
- Init-param #context-param #
- 어노테이션 #@WebServlet #WebServlet #
- View #
- web.xml #배포지시자 #서블릿테스트
- Doit #Doit오라클 #Doit시리즈 #연습문제
- 정처기필기합격 #정처기합격후기
- 서블릿선언 #서블릿선언방법 #
- html #자바와서블릿 #자바와웹연결 #웹연결
- java #array #자바 #배열 #프로그래밍 #코딩 #자바프로그래밍
- 정처기 #정처기필기 #정보처리기사 #정보처리기사필기 #정보처리기사2023 #정처기2023 #정처기3회 #정보처리기사3회 #정보처리기사실기 #정처기실기 정처기합격
- 자바 #웹자바 #JAVA #WEB #WEBJAVA #WEBPROGRAMMING #웹 #웹프로그래밍 #코딩 #CODING #모델1 #모델2 #모델1방식 #모델2방식
- 마이바티스환경설정
- jsp #게시판만들기 #자바로게시판만들기 #웹테스트 #JNDI #myora #Oracle #오라클 #DAO #DTO #아파치톰캣 #웹자바셋팅 #모델1 #모델1방식 #모델1방식웹프로그래밍 #웹프로그래밍
- cos.jar #cos드라이버 #파일업로드드라이버 #루피는귀여워 #마이바티스 #MyBatis #마이바티스sql #마이바티스DB #마이바티스jsp #마이바티스이클립스 #mapper #config.xml #마이바티스다운로드
- 자바웹프로그래밍
- 정처기3회 #정보처리기사2023
- QUERY #DML #SQL문 #내림차순정렬 #오름차순정렬
- sql #오라클 #불리언형 #boolean #webjava #java #jsp #Mybatis #마이바티스 #마이바티스환경설정 #모델1 #모델1프로그래밍 #Batis #마이바티스다운로드 #web설정 #웹프로그래밍 #게시판 #게시판제작 #게시판만
- spring #스프링 #전자정부표준프레임워크 #표준프레임워크 #자바스프링 #스프링다운로드 #자바스크립트 #웹프로그래밍설정 #웹프로그래밍셋팅
- 8 실무에서 가장 많이 사용하는 SQL
- 방통대 #방송통신대학교 #컴퓨터과학 #컴퓨터과학과 #컴과 #방통대컴퓨터과학과 #방통대컴과 #방통대파이썬 #방통대C #방통대자바
- 기말고사 #방통대기말고사 #방통대후기 #방통대기말고사후기 #방통대2023년1학기 #방통대1학기 #방통대C프로그래밍 #방통대장학금 #방통대영어회화1
- 서블릿 #자바모델1 #자바모델2 #mvc #mvc패턴
- tern다운로드 #메이븐다운로드 #maven #스프링라이브러리 #자바라이브러리 #톰캣설정 #WAS #웹어플리케이션서버
- Model #
- Controller
- Today
- Total
장미의 개발일기
자바로 Tic Tac Toe 틱택톡 게임 만들기 + 음악 넣기 본문
오늘도 오류랑 열심히 싸웠다 ㅠㅠㅠ
재생영상 한번 찍어봤다~ 한손으로 타자치고, 한손으로 촬영하느라 흔들림이 많음
(인코딩하는데 상하,좌우반전 다 해야하는 줄 몰라서 3번이나 했다... 자고싶어 )
음악소리가 포인트 ~
인터페이스썼다가 딱히 쓸모없어서 걍 지움
소스파일은 3개 Mp3player class( jlayer 드라이브 필수), Tic Tac Toe class , UI(메인)
내가 원하던 것: 게임시작과 동시에 음악1 재생
승리자 정해진 순간에 음악1 스탑, 음악2 재생(축하음)
문제점1.
처음엔 겜 끝나고 음악2가 재생이 자꾸 안됐다. 이건 데몬스레드를 해지하면서 해결이 되었다. ㅇㅇ
대신 메인끝나고 음악은 끝까지 재생.
문제점2.
승리자를 판별하는 메소드가 첫 입력 후에 무조건 실행된다는 거...
이건 gpt 탓을 해야함 얘가 애초에 틀린 답을 알려줬음...
차라리 혼자 고민했으면 처음부터 맞는 코드는 작성했었을 것 같다. 점점 신뢰도가 떨어져;;
for (int i = 0; i < 3; i++) { if (board[i][0] == player && board[i][1] == player && board[i][2] == player) { // 틀린거 //board[i][1] && board[i][1] == board[i][2] && board[i][0] ==board[i][2]) // 틀린이유: 이미 다 빈공간이라서 조건이 충족되서 계속 첫판에 승리자가 나옴 |
이건 코드 다시보고 내가 알아서 고쳤음.. 애초에 말이 안되는 조건식이었는데 ㅋㅋㅋ...허무
문제점3.
음악1을 Tic Tac Toe클래스의 생성자에 집어 넣었더니 깔끔하게 바로 실행되서 좋았는데
마지막엔 결국엔 음악1재생 메소드를 UI에 직접 객체 생성과 메소드를 호출했어야 했다 ㅠㅠ
내가 하고 싶었던 건 가능한 클래스 안에 넣는건데 ㅠㅠ
추가해야할 기능 좀 있는데
무튼 원하는 대로 완성~
코드1.mp3player class
package tic_tac_tok;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
public class Mp3player {
//아래는 음악 파일 경로.
private String mp3Start ="C:\\\\MV0cm.mp3"; //게임시작 음악 (
private String mp3Win ="C:\\Users\\SmallCongratulations(1).mp3"; // // 승리음악 경로
private Player playerS; // 음악을 실행시켜주는 객체
//private Player playerW; // 음악을 실행시켜주는 객체
private int position; // 위치값
public String getMp3Start() {
return mp3Start;
}
public String getMp3Win() {
return mp3Win;
}
//게임시작할때 나오는 음악
public void playmp3Start(String mp3Start) {
BufferedInputStream bis=null;
try {
bis = new BufferedInputStream(new FileInputStream(mp3Start));
playerS = new Player(bis);
} catch (Exception e) {
e.printStackTrace();
}
Thread t = new Thread() {
public void run(){
try {
playerS.play();
} catch (JavaLayerException e) {
e.printStackTrace();
System.out.println("S재생미스");
}
};
};
t.setDaemon(true);
t.start();
}// start
//승리자가 정해졌을때 축하하는 음악
public void playMp3Win(String mp3Win) {
BufferedInputStream bis=null;
try {
bis = new BufferedInputStream(new FileInputStream(mp3Win));
playerS = new Player(bis);
} catch (Exception e) {
e.printStackTrace();
}
Thread t = new Thread() {
public void run(){
try {
playerS.play();
} catch (JavaLayerException e) {
e.printStackTrace();
System.out.println("W재생미스");
}
};
};
//t.setDaemon(true); //이걸 해버리면 음악재생이 아예 안되버림
t.start();
}// start
//음악 2가지 다 정지 가능한 메소드
public void stpoMusicS() {
if (playerS != null) {
playerS.close(); // 종료
}
}//st mu
/*
* public void stpoMusicW() { if (playerW != null) { playerW.close(); // 종료 }
* }//st mu
*/
}//
코드2: 틱택톡 class
package tic_tac_tok;
public class TicTacTok {
private char player1 = 'O';
private char player2 = 'x';
char[][] board;
Mp3player mp3 = new Mp3player();
// 생성자: 보드 출력 및 초기화
public TicTacTok() {
// 게임시작 및 빈 게임판 출력
gameStart();
}// 생성자
// 게임시작 및 빈 게임판 출력
public void gameStart() {
//Mp3player mp3= new Mp3player();
//mp3.playmp3Start(mp3.getMp3Start());
System.out.println("플레이 순서를 정해주세요. 플레이어 1번: O 플레이어 2번: X 입니다.");
System.out.println("게임을 시작합니다. 자신의 문자와 좌표 x,y를 순서대로 입력해주세요. +좌표범위: 0~2 ");
board = new char[3][3];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
board[i][j] = ' ';
}
}
printBoard(); // 프린트까지
}
public char[][] getBoard() {
return board;
}
public void printBoard() {
for (int i = 0; i < 3; i++) {
System.out.println(board[i][0] + " | " + board[i][1] + " | " + board[i][2]);
if (i < 2) {
System.out.println("---------");
}
}
}
// 이미 가득차있는경우 / 비어있는 경우
public void playGame(char player, int x, int y) {
if (player != 'X' && player != 'O') { //
System.out.println("올바른 기호를 입력하세요");
return;
}
if ((x < 0 || x > 2) || (y < 0 || y > 2)) {
System.out.println("좌표의 범위를 벗어났습니다. 다시 입력하세요.");
return;
} else {
if (board[x][y] != ' ') {
System.out.println("이미 입력된 칸입니다. 다시 입력하세요.");
return;
} else {
board[x][y] = player;
}
}
}// playgame
public boolean isWiner(char player) {
for (int i = 0; i < 3; i++) {
if (board[i][0] == player && board[i][1] == player && board[i][2] == player) {
// 틀린거 //board[i][1] && board[i][1] == board[i][2] && board[i][0] ==board[i][2])
// 틀린이유: 이미 다 빈공간이라서 조건이 충족되서 계속 첫판에 승리자가 나옴
return true;
}
} // for 가로검사
for (int i = 0; i < 3; i++) {
if (board[0][i] == player && board[1][i] == player && board[2][i] == player) {
return true;
}
} // for 세로검사
// 대각선검사1
if (board[0][0] == player && board[1][1] == player && board[2][2] == player) {
return true;
}
// 2
if (board[2][0] == player && board[1][1] == player && board[0][2] == player) {
return true;
}
// 음악 나오게
return false; // 승리에 해당사항이 없는 경우;
}// iswinner
public void winEnding(char player) {
Mp3player mp3 = new Mp3player();
mp3.playMp3Win(mp3.getMp3Win());
System.out.println("축하합니다. 승리자 " + player + "님! 승리하셨습니다.");
}
}
코드3: UI 이자 메인
package tic_tac_tok;
import java.util.Scanner;
import com.sun.source.tree.ContinueTree;
public class UI {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Mp3player mp3 = new Mp3player();
TicTacTok t = new TicTacTok();
mp3.playmp3Start(mp3.getMp3Start());
end: while (true) {
System.out.print("1. 플레이어 입력 (O or X): ");
char player = sc.nextLine().charAt(0);
try {
System.out.print("2. x좌표: ");
int x = Integer.parseInt(sc.nextLine());
System.out.print("3. y좌표: ");
int y= Integer.parseInt(sc.nextLine());
t.playGame(player, x, y);
t.printBoard();
boolean res = t.isWiner(player);//
if(res==true) {
mp3.stpoMusicS();
t.winEnding(player);
}else{
continue end;
}
} catch (NumberFormatException e) {
System.out.println("양수인 정수만 입력해주세요!");
continue end;
}
break end;
}// wh
//System.out.println("게임을 다시 플레이하시겠습니까? 1번을 누르면 다시 시작합니다.");
}//main
}
'개발일기 > Java' 카테고리의 다른 글
자바로 음악재생 해보기 : 쓰레드 Thread (Daemon Thread) (1) | 2023.05.07 |
---|---|
File IO Stream과 Buffered IO Stream 속도 비교 (0) | 2023.05.01 |
Java: IOStream : InputStream, OutputStream / 문자 Stream: Reader, Writer (0) | 2023.05.01 |
File class : 지정된 폴더의 파일 찾기, 없으면 생성하기 (0) | 2023.05.01 |
인터페이스 상속 : 예제 ( 중앙부서, 모형부서3) (0) | 2023.04.25 |