binlee0903 / se13_team_project

GNU General Public License v2.0
1 stars 3 forks source link

기초 화면 구현 및 네비게이션 기능 #9

Closed someh2705 closed 8 months ago

someh2705 commented 8 months ago

현재 테트리스 요구 사항으로는 시작 화면, 인게임 화면, 랭킹 화면, 설정 화면 4가지를 구현해야합니다. 인게임 종료 시 랭킹 등록을 위해 다른 화면에 다이얼로그를 띄울 수 있는 기능도 지원하면 좋겠습니다.

someh2705 commented 8 months ago

JavaFX 를 사용하면 화면 전환 기능이 쉽게 되는 것 같긴 한데 문제는 JXML이란 마크업 언어를 새로 배워야 하더라고요. 그래서 Swing으로 직접 만들려고 해봤는데 숙련도가 부족해서 JFrame 기반으로 구현해봤지만 맘에 들진 않네요

찾아본 내용으로는 JFrame 안에 JPanel을 넣는 구조라서 JPanel로 화면 전환을 하려 했지만 생각처럼 되지 않았습니다.

다만 어차피 처음부터 공부할거라면 굳이 불편한 Swing을 공부하는 것보다 지원하는 기능이 많은 다른 프레임워크를 공부하는게 낫지 않은지, Swing을 잘 쓰실 줄 아는 조원분이 계신다면 그 분께서 구현을 도와주시는건 어떠신지 상의해보는 것도 좋을 것 같습니다

someh2705 commented 8 months ago

선택할 수 있는 방안들은 이정도 있을 것 같습니다.

  1. lanterna (조장님이 얘기하신 텍스트 기반 GUI 프레임워크)
  2. JavaFX
  3. Swing
  4. libgdx (자바 게임 엔진)

저는 어떤걸 선택해도 기초부터 공부해야해서 저희 게임에 필요한 기능을 많은 지원하는 걸로 선택하면 좋겠네요.

STkangyh commented 8 months ago

Creating a Tetris game in Java is an excellent project for learning about game development, graphics, and user interface programming. Each of the mentioned frameworks—Lanterna, JavaFX, and Swing—has its own set of advantages and is suitable for different kinds of projects. To decide which one to use, consider the following aspects of each framework:

Lanterna Use Case: Lanterna is designed for creating text-based user interfaces, making it somewhat unique among the three options. It's great for terminal-based applications and can be a fun, retro way to create a Tetris game without the complexity of graphical UIs. Learning Curve: It has a moderate learning curve, especially if you're not familiar with terminal-based UIs. Performance: It's lightweight and performs well for text-based interfaces. Suitability: If you're aiming for a nostalgic or minimalist Tetris game that runs in the terminal, Lanterna is a good choice. JavaFX Use Case: JavaFX is a modern framework for building rich internet applications with graphics and media. It's well-suited for creating a Tetris game with modern graphics, animations, and even sound effects. Learning Curve: JavaFX has a steeper learning curve than Swing due to its rich feature set and modern approach to UI development. Performance: It offers good performance for graphics-heavy applications, but it might require more resources than Swing or Lanterna. Suitability: Choose JavaFX if you want your Tetris game to have a modern look and feel, with the potential for complex graphics and effects. Swing Use Case: Swing is an older GUI framework that's been part of Java for many years. It's well-documented and has been used to create a wide range of applications, from simple utilities to complex software. Learning Curve: Swing is relatively easy to learn, especially with the vast amount of tutorials and resources available. Performance: It provides decent performance for 2D graphics, enough for a Tetris game. Suitability: Swing is a good choice if you're looking for a balance between ease of use and the ability to create a visually appealing game without the need for the latest GUI features.

Decision Factors Project Goals: What are the goals of your project? If you're focusing on learning game logic and algorithms, the choice of UI might be less critical. For a visually appealing game, JavaFX might be the better choice. Team Experience: Which frameworks are your team members already familiar with? Learning a new framework can be time-consuming. Project Timeline: Consider your deadline. Swing and Lanterna might allow for quicker development due to their simplicity and the abundance of resources.

Recommendation For a modern and graphically appealing Tetris game, go with JavaFX. It's the most suitable for creating a rich user experience with animations and effects. If you're interested in creating a simple, retro-style game or want to focus on the logic more than the UI, Lanterna could be a fun choice. If your team prefers a balance between ease of development and the ability to create a game with a traditional GUI, Swing is a reliable option. Consider your team's strengths and the project's goals to make the best choice. Each framework has its own advantages, and the right choice depends on what you want to achieve with your Tetris game.

GPT한테 물어봤을 때는, 그래픽으로 어필하는 게 중요하면 JavaFX, 간단하게 로직에 집중하고 싶으면 Lanterna, 밸런스 있게 하고 싶으면 Swing을 사용하는 걸 추천하네요. 프레임워크에 따라 장점이 있는 것 같습니다.

someh2705 commented 8 months ago

libgdx가 게임엔진이라 그런지 가이드 문서도 잘 되어있고 지원하는 기능도 많네요. key-value 저장소도 기본 제공하고, 오디오, 네트워킹, 배포 모두 공식 문서에서 가이드가 되어있습니다. 테트리스 예제 코드도 찾아서 이슈 생겨도 잘 해쳐나가지 않을까 싶습니다. UI 구현이 어렵다는 얘기는 잘 모르겠네요. 공식 지원하는 UI 라이브러리도 찾긴 했습니다. 실제 구현하는 유튜브 영상으로 보는데 FXML 같이 마크업 언어 따로 공부할 필요 없이 자바만으로도 구현할 수 있어 보였습니다.

다만 유니티 같은 게임 엔진에 경험이 있지 않으면 러닝 커브가 꽤 있어 보입니다.

binlee0903 commented 8 months ago

javaFX는 간단하게 화면구성, 화면 전환을 FXML 끼리 Scene의 노드를 바꿔주기만 해도 구현이 가능하고, 테트리스 게임 자체는 게임화면에 TextField 라는 개체를 사용해서 구현하면 될 것 같습니다. UI 디자인은 javaFX에서 지원하는 GUI 편집 툴(scene builder)를 사용해서 만들면 쉽게 구성 가능하고, 사용자 입력 또한 event driven 방식으로 구현되어 있어 게임 개발에도 큰 무리가 없을 것 같습니다. 다른 기능들은 일반 java 개발하듯이 개발하면 될 것 같습니다.

javaFX는 웹 개발에 경험이 있는 경우 매우 쉽게 적응이 가능한 것 같습니다. spring이랑 거의 비슷한 방식으로 개발할 수 있는 것 같은데, javaFX의 경우 웹 개발에 경험이 없으면 적응이 상대적으로 힘들 수 있을 것 같습니다.

또한 javaFX로 만든 게임의 예제들이 많아보입니다.

hyotaime commented 8 months ago

javaFX와 libgdx 둘다 자세히 알지는 못하지만 javaFX는 예전 수업시간에 한번 다뤄보기도 했고 libgdx는 다양한 기능을 지원하는 것은 맞지만 저희가 만드는 간단한 텍스트기반 테트리스 게임에 사용하기에 javaFX가 더 적합한 것 같습니다.

다른 내부 구현은 게임엔진 없이 가능하지 않을까 생각합니다.

someh2705 commented 8 months ago

NavGraph를 org.se13.view.nav 패키지로 이동시키고 싶었는데 해보니까

JavaFX java.lang.IllegalStateException: Location is not set.

에러가 발생하네요.

좀 더 찾아봐야겠습니다.

20