Java 기반의 테트리스 게임 시스템 설계 및 구현(프로젝트 보고 + 방어 PPT + 소스 코드 + 데이터베이스 + 스크린샷 + 배포 영상)

Java 기반의 테트리스 게임 설계 및 구현

    테트리스는 전 세계적으로 인기가 높은 게임으로 처음부터 현재까지 컴퓨터, 휴대폰, 휴대용 게임기에서 인기를 끌었으며, 간단한 게임 규칙을 지닌 단순한 고전 게임이지만 재미가 부족하지 않습니다. 배우기 쉽고 적용 가능하며 범위가 넓고 잘 알려져 있습니다. 테트리스 게임의 간단한 기본 규칙은 작은 사각형으로 구성된 7개의 서로 다른 일반 그래픽이 화면에서 차례로 떨어지며, 플레이어가 이동하여 떨어지면 완전한 수평 막대를 만든 다음 사라지는 것입니다. 플레이어가 점수를 획득하고 게임이 진행됩니다. 레벨이 증가하며 남은 그래픽이 화면 상단까지 쌓이면 게임이 종료됩니다.

    테트리스는 원래 1984년 러시아인 Alexei Pajitnov가 개발한 캐주얼 게임이었습니다. 한때 비교할 수 없는 상업적 가치를 창출했으며 캐주얼 게임 세대의 개발 및 산업 체인에 영향을 미쳤습니다. 정보화 시대와 과학 기술의 지속적인 발전과 변화로 인해 컴퓨터는 모든 사람의 삶에 대중화되었으며, 바쁜 직장 생활에서 이러한 캐주얼 게임은 사람들에게 휴식을 제공합니다.

    본 논문은 고전적인 전통적인 테트리스 구현의 기본 아이디어와 몇 가지 기본 게임 규칙을 자세히 설명하고 분석하며, 이를 바탕으로 테트리스의 혁신적이고 창의적인 모델을 더욱 발전시키고 고전 게임을 기반으로 하는 동반 게임을 개발합니다. 레벨이 높아지면 난이도도 높아지며, 블록의 색상 변화를 제어할 수 있는 모듈을 창의적으로 개발하고 게임 사운드, 음악 모듈을 추가했습니다. 이 문서에서는 위 기능에 대한 구체적인 구현 프로세스, 자세한 설명 및 일부 소스 코드를 제공합니다.

본 논문에서는 테트리스 게임의 개발 및 개발 역사, 본 게임 개발의 의의, 개발 환경, 소프트웨어 개발 관련 지식 및 소프트웨어 공학을 기반으로 한 자바 프로그래밍에 대해 설명하고, 프로그램의 요구사항 분석, 개요 설계, 세부 설계 및 구현, 디버깅 작업에 대한 일련의 설명이 제공됩니다.

    본 프로그램 디자인은 Microsoft Windows 7 시스템을 기반으로 개발 언어로 Java를 사용하고 Eclipse 개발 플랫폼에서 게임 디자인 및 구현을 수행합니다.

키워드: 게임 디자인, 테트리스, 소프트웨어 엔지니어링, Java, Eclipse.

목차

Java 기반의 테트리스 게임 설계 및 구현 ................................. I

요약................................................. ..................... 나

자바 게임 테트리스의 디자인과 구현을 바탕으로 .............. II

추상적인 ................................................. .................II

1. 소개................................................ ..................... 1

1.1 프로그램 개발의 배경과 의의.................................................................. 1

1.2 개발기술 개요.................................................................. ......... 2

1.3 테트리스 게임 연구현황.................................................. 2

1.3.1 국내외 연구 현황.................................................................. .... 2

1.3.2 문헌 검토..................................................... ... ........ 삼

2관련 기술........................................................... .............4

2.1 자바 소개.................................................................. .. ............ 4

2.2 스윙 컴포넌트 소개.................................................................. ... ....... 4

2.3 Eclipse 개발 플랫폼 소개.................................................................. .... ... 5

2.4 시스템 플랫폼 환경 : .............................................. ..... .. 6

2.4.1 하드웨어 플랫폼:.................................................. .... ....... 6

2.4.2 소프트웨어 플랫폼:................................................. .... ....... 6

3 시스템 분석........................................................... ........................... 7

3.1 타당성 분석..................................................................... ........... 7

3.1.1 경제적 타당성 분석..................................................... 8

3.1.2 기술적 타당성 분석.................................................................. ..... .... 8

3.1.3 사회적 타당성 분석.................................................................. ..... .... 8

3.2 요구사항 분석..................................................................... ........... 8

3.2.1 기능적 요구사항.................................................. ..... .. 9

3.2.2 비기능적 요구사항.................................................. ... ... 9

3.2.3 인터페이스 제어..................................................... ... ....... 9

4 시스템의 개요 설계....................................................... ...... ...... 11

4.1 시스템의 기능적 설계................................................................ .... ...... 11

4.1.1 수동 업무 처리의 기본 프로세스.................................................................. 11

4.1.2 기본 프로세스의 기능 모듈.................................................. 12

5 시스템의 세부 설계 및 구현.................................................. .. ..... 15

5.1 게임 메인 인터페이스 디스플레이 모듈.................................. ... 15

5.2 캔버스 및 상자 디스플레이 모듈.................................................. 16

5.2.1 배경 캔버스 모듈 디자인.................................................. ..... 16

5.2.2 블록 모듈 설계 미리보기.................................................. ..... 19

5.2.3 블록 이동 및 회전 모듈 설계.................................................................. 21

5.3 제어판 모듈.................................................. .. ........ 25

5.3.1 메뉴바 모듈 디자인.................................................................. ..... .. 25

5.3.2 제어판 버튼 디자인.................................................. ..... 26

6 시스템 테스트 동작....................................................... ...... ......29

6.1 테스트 개요................................................................. ........29

6.1.1 테스트 원칙..................................................................... ... ...... 29

6.1.2 시험 방법.................................................. ... ...... 30

6.1.3 시험의 중요성과 주의사항.................................................. 31

6.2 게임 코드 및 알고리즘 테스트.................................................. ... 31

6.3 게임 인터페이스 메뉴 옵션의 기능 테스트........................................... 32

6.4 주요 이벤트의 기능 테스트.................................................. .... 34

6.5 블록 쌓기 및 제거 기능 테스트.................................................................. 35

6.6 테스트 결과........................................................... ........... 35

결론적으로................................................ ........... 36

참고자료................................................................ . ................. 38

감사의 말씀.......................................................... ....................................... 39

부록 A 외국어 원문................................................................ ..... ........40

테트리스의 심리학.................................................. 40

부록 B 외국어 번역................................................................. ..... ........43

테트리스의 심리적 효과....................................................... ..... 43

1. 소개

    서문에서는 프로그램 개발 배경, 개발 의의, 필요한 개발 기술, 국내외 테트리스 게임 연구 현황 등을 간략하게 설명한다.

1.1 프로그램 개발 배경 및 의의

    테트리스 게임은 전 세계적으로 인기 있고 지속적인 게임으로, 컴퓨터, 휴대폰, TV 게임기, 휴대용 게임기 등 일련의 제품에서 플레이할 수 있는 캐주얼 게임으로, 거의 모든 기기를 만들어냈습니다. 이는 어떤 게임에서도 비교할 수 없는 센세이션과 셀 수 없는 상업적 가치를 지닌 게임으로, 게임과 소프트웨어 개발의 역사에 있어서 중요한 사건입니다.

    1984년 6월 어느 날, 러시아 모스크바의 수학자 알렉스 파지트노프(Alex Pajitnov)는 자신이 근무하던 모스크바 과학 컴퓨터 센터에서 직소 퍼즐을 플레이한 후 갑자기 이 게임을 디자인해야 한다는 영감을 얻었는데, 처음에는 일렉트로니카 60(Electronica 60)에서만 개발하고 있었습니다. 컴퓨터), 이후 Vadim Gerasimov를 통해 PC로 이식되어 모스크바 컴퓨터 커뮤니티에 널리 퍼졌습니다. 테트리스는 인기를 끌기 시작하여 역사상 가장 많이 팔린 클래식 캐주얼 게임이 되었지만 여전히 그 매력을 유지하고 있습니다. 언제나. 테트리스의 간단한 기본 게임 규칙은 작은 사각형을 배치하는 표준 가상 게임 필드에 있으며 기본 단위는 작은 사각형이며 4개의 작은 사각형과 7개의 서로 다른 일반 그래픽(필드 모양, Z 모양, 역방향 Z 모양, 7자형, 역7자형, T자형, 긴바) 플레이어의 위쪽 키, 왼쪽, 위쪽 키 조작을 통해 블록을 90도, 180도, 270도, 360도 회전시키는 총 28가지 그래픽 방식이 있습니다. 오른쪽 키와 아래쪽 키를 사용하여 낙하를 가속하여 위치를 조정하기 위해 화면 하단에 블록이 하나 이상의 완전한 블록으로 형성된 다음 제거되어 새로 떨어지는 블록을 위한 공간을 만듭니다. 가로 막대가 제거되면 플레이어의 레벨이 한 단계 증가하며, 일정 레벨에 도달하면 시간이 지날수록 낙하 속도가 빨라지며, 제거되지 않은 블록이 화면 상단에 도달하면 게임이 종료됩니다.

    컴퓨터 기술의 지속적인 업데이트와 발전으로 테트리스 게임은 끊임없이 다양한 모드를 도입하고 있으며, 게임 자체가 단순할 수도 있고 복잡할 수도 있고 게임 플레이어를 잘 훈련시킬 수 있기 때문에 누구나 플레이할 수 있는 다양한 버전이 존재합니다. 논리적인 사고력도 플레이어에게 끝없는 게임 재미를 선사할 수 있어 대다수의 플레이어에게 깊은 사랑을 받고 있습니다. 게임 소프트웨어를 개발할 때 대부분의 사람들은 그것이 불가능하고 마술적이라고 느낍니다. 개발 방법과 도구의 지속적인 혁신으로 일부 작은 게임을 혼자서 개발하는 것은 불가능하지 않습니다. 테트리스 게임은 게임 역사상 비교할 수 없는 지위를 가지고 있으며, 게임 인터페이스가 단순하고 코드가 그다지 복잡하지 않으며, 인터넷에서 테트리스 게임을 구현하는 데에도 많은 알고리즘과 디자인이 있으며 난이도는 특별히 크지 않습니다. 높은.

    테트리스는 단순하고 퍼즐적인 게임입니다. 독특하고 간결한 인터페이스와 매우 재미있는 플레이 모드로 인해 많은 게임 매니아들이 깊이 빠져들고 빠져나올 수 없습니다. 모든 연령대에 적합합니다. 오늘날의 빠르게 변화하는 생활 속에서 학생들과 직장인들에 대한 공부와 일의 압력도 증가하고 있으며 모든 사람의 업무가 점점 더 무거워지고 휴식을 위한 자유 시간이 점점 줄어들고 있어 사람들에게 간단한 것이 더욱 절실히 필요합니다. 모두가 즐길 수 있는 시간 절약형 캐주얼 게임입니다. 테트리스는 단순한 퍼즐이자 흥미로운 캐주얼 게임이며 컴퓨터, 휴대폰, 태블릿, TV 게임 콘솔, 휴대용 게임 콘솔, 전자 사전, MP4 및 기타 휴대용 장치와 같은 일련의 휴대용 장치에 이식될 수 있다는 점에는 의심의 여지가 없습니다. 장치. 이번 연구 프로젝트는 기술 발전 측면에서나 사회적 의미 측면에서 매우 가치 있는 일이며, 게임을 개발하려는 저의 과감한 시도입니다.

1.2 개발기술 개요

소프트웨어 엔지니어링은 효과적이고 실용적이며 고품질의 소프트웨어를 구축하고 유지하기 위해 엔지니어링 방법을 사용하는 것을 연구하는 학문입니다. 디자인에는 프로그래밍 언어, 데이터베이스, 알고리즘, 소프트웨어 개발 도구, 시스템 플랫폼, 디자인 패턴 및 기타 여러 측면이 포함됩니다. 현대 사회에서 소프트웨어는 이메일, 임베디드 시스템, 인간-컴퓨터 상호 작용 인터페이스, 사무용 제품군, 운영 체제, 편집기, 데이터베이스, 게임 등과 같은 다양한 일반적인 측면에서 사용되는 동시에 오늘날 사회의 다양한 산업에서 사용됩니다. 경제 및 사회 발전을 효과적으로 촉진하고 사람들의 업무 효율성과 생활 효율성을 향상시킬 수 있는 산업, 농업, 은행, 항공, 정부 부서 등을 포함한 컴퓨터 소프트웨어 응용 프로그램입니다.

테트리스 게임 개발 코드는 상대적으로 특별히 복잡하지 않으며, 본 논문은 Java 프로그래밍 언어를 기반으로 하며 Java 언어에서 일반적으로 사용되는 Swing 구성 요소를 사용합니다. Swing은 Java의 그래픽 사용자 인터페이스(GUI) 툴킷입니다. Java 기본 클래스의 일부입니다. 여기에는 텍스트 상자, 분리된 창, 버튼, 테이블 및 기타 GUI 장치가 포함됩니다. 순수 Java로 작성되었습니다. 개발자는 작은 도구를 사용할 수 있습니다. Swing의 다양하고 유연하고 풍부한 기능과 모듈식 구성 요소에 대한 코드를 작성하여 아름답고 우아한 사용자 인터페이스를 만들 수 있습니다. Java Swing 구성 요소에는 일반적으로 사용되는 다음과 같은 클래스가 포함됩니다. JFrame은 화면상의 그래픽 객체로 최대화, 최소화, 닫기 등의 기본 작업을 수행할 수 있으며 Java GUI 프로그래밍의 기본 아이디어이며 JPanel을 사용할 수 있습니다. 중첩을 위해 폼 내에서 동일한 논리 기능을 가진 컴포넌트를 결합하여 JFrame 폼에 추가할 수 있으며, Swing의 패널 컨테이너 클래스입니다. JLabel 객체는 텍스트, 이미지 또는 둘 다를 표시하는 데 사용되며 해당 속성 중 일부를 설정할 수 있습니다. JTextField는 텍스트 한 줄을 편집하는 데 사용되는 실행 구성 요소이고, JButton은 버튼을 만드는 데 사용되는 클래스입니다. 또한 Java의 Swing 구성 요소에는 아름다운 그래픽 인터페이스를 쉽게 만들 수 있는 많은 기능 클래스도 포함되어 있습니다.

1.3 테트리스 게임의 연구현황

1.3.1 국내외 연구현황

21세기 들어 컴퓨터가 계속해서 발전하면서 e스포츠 산업도 계속해서 성장 단계에 들어서면서 게임 소프트웨어의 발전이 점점 대중화되고 있다. 점점 더 대중화되고 있는 새로운 유형의 기술 종합 예술 제품. 일반적인 웹 개발, 소프트웨어 개발과 달리 컴퓨터 게임 소프트웨어 개발은 ​​디자이너와 개발자가 전문적인 프로그래밍 기술과 소프트웨어 엔지니어링 방법을 숙달해야 할 뿐만 아니라, 효과적인 게임 분야의 전문 지식과 전문적인 게임 개발 지식도 필요합니다. 게임의 생생한 인터페이스, 음향 효과 처리, 플레이어와의 완벽한 상호 작용 등을 개발 및 구현합니다.

원래 구소련의 과학자 알렉스 파지트노프(Alex Pajitnov)가 개발한 '테트리스' 게임은 교육용 소프트웨어로 시작되다가 여러 게임회사에 라이선스가 부여되기 시작했고, 이후 모든 주요 플랫폼에서 이용 가능해지면서 다양한 버전의 게임이 등장했다.

테트리스의 게임보이 버전은 일본에서 424만 개가 판매되어 게임보이 게임 역사상 가장 인기 있는 게임이 되었습니다. 걸프전 기간 동안 테트리스는 최전선에 있는 미군에게 가장 적합한 시간 죽이기 게임 중 하나가 되었습니다.

테트리스의 기본 원리는 대부분의 프로그래머에게 상대적으로 간단하며 테트리스는 수학적, 동적이며 잘 알려져 있습니다. 게임 프로그래밍의 실습 과목으로도 자주 사용됩니다.

1.3.2 문헌 검토

문서 [1]과 [2]는 제로 기반 설명을 목표로 하며, 예제를 사용하여 독자가 심도 있게 학습할 수 있도록 안내하고, 기본 지식 → 핵심 기술 → 고급 응용 → 실제 프로젝트 실습의 설명 모드를 사용하여 다양한 Java 기술 및 실습을 설명합니다. 간단하고 이해하기 쉬운 용어.스킬. 자바 언어를 활용한 프로그램 개발에서 익혀야 할 기술의 모든 면을 초보자의 관점에서 이해하기 쉬운 언어와 다채로운 예제를 통해 자세하게 소개하고 있다. 포함 내용: Eclipse 개발 도구, Java 언어 기본 사항, 클래스 및 개체, 패키징 클래스, 숫자 처리 클래스, 인터페이스, 상속 및 다형성, 클래스의 고급 기능, 예외 처리, Swing 프로그래밍, 컬렉션 클래스, I/O 입력 및 출력에 대한 지식 리플렉션, 열거형 및 제네릭, 멀티스레딩, 네트워크 통신, 데이터베이스 작업, 스윙 테이블 구성 요소, 스윙 트리 구성 요소, 기타 고급 Swing 구성 요소, 고급 레이아웃 관리자, 고급 이벤트 처리, AWT 그리기 및 오디오 재생 등 이 두 문서는 풍부한 예제와 자세한 내용을 통해 "충분한" Java 언어 및 기술을 다루며, 특정 Java 기반을 갖춘 초보자와 학생을 위해 학생들의 개발 기술과 기술을 빠르게 향상시킬 수 있습니다. 본 프로젝트를 설계함에 있어 그래픽 인터페이스 디자인, 사용자 인터페이스 구성요소 및 디자인, 이벤트 처리 및 윈도우 구성 구성요소와 관련된 내용과 Swing 및 해당 구성요소 시리즈에 대한 기본 지식은 모두 이 두 문서를 참조했으며, 나에게 많은 영감을 주었습니다. 도와주세요.

문서 [3]은 주로 2D 드로잉, 게임 애니메이션 제작, 네트워크 프로그램 기반, 향상된 게임 인터페이스, 인공 지능 및 2.5D 게임, 지뢰 찾기, 미로, 테트리스 및 기타 게임 예제, 충돌, 입자 시스템, 5D 3차원 좌표 및 기타에 대해 설명합니다. 그리기 알고리즘, 멀티플레이어 온라인 게임 제작. 독자들이 좀 더 편리하게 사용할 수 있도록 일련의 알고리즘 수식을 모아두었습니다. 단계별 접근 방식으로 게임 디자인 프로세스를 점진적으로 분석하여 독자가 게임 개발 단계에서 발생할 수 있는 문제를 해결하도록 유도하고 Java 게임 제작의 실제 경험을 요약합니다. 게임의 원리, 애니메이션 구현, 음향 효과 처리, 마우스 및 키보드 이벤트 처리, 인공 지능 및 본 과정 설계에 필요한 기타 지식은 모두 이 문서를 참조합니다.

문헌[4]은 고전 컴퓨터 게임 테트리스의 프로그램 원리와 구현 기술을 논의하고 소프트웨어 공학의 관점에서 프로그램의 기능 요구 사항, 데이터 구조, 그래픽 회전, 좌표 변환 및 기타 핵심 기술을 설명합니다. 이 문서를 통해 나는 테트리스 게임 개발이라는 전문 분야에 대해 더 많이 알게 되었습니다.

문서 [5]는 Java를 사용하여 문제를 생각하고 해결하는 방법을 설명하는 데 더 중점을 둔 고급 책입니다. 이 문서는 코스 설계 과정에서 Java 프로그래밍 아이디어와 기술에 대해 많은 도움을 주었습니다.

2관련 기술

2.1 자바 소개

    Java는 Sun Microsystems에서 출시한 Java 객체 지향 프로그래밍 언어 및 Java 플랫폼의 일반적인 이름입니다. 크로스 플랫폼 응용 프로그램 소프트웨어를 작성할 수 있는 객체 지향 프로그래밍 언어 입니다 . Java 기술은 우수한 다양성, 효율성, 크로스 플랫폼 및 보안을 갖추고 있으며 PC, 데이터 센터, 게임 콘솔, 과학 슈퍼 컴퓨터, 휴대폰 및 인터넷에서 널리 사용되며 세계 최대 규모의 전문 개발자 커뮤니티를 보유하고 있습니다.

지난 20년 동안 자바 언어는 인간 컴퓨터 역사상 가장 영향력 있는 프로그래밍 언어 중 하나로 발전했으며, 어느 정도는 프로그래밍 언어의 범위를 넘어 개발 플랫폼이자 언어로 자리잡았다. 개발 플랫폼 정식 모드. 더욱이 Java는 일종의 신념이 되었으며 Java 언어가 옹호하는 오픈 소스, 자유 및 기타 정신은 전 세계 수많은 뛰어난 프로그래머를 끌어 모았습니다. 사실, 인류 역사상 이렇게 많은 뛰어난 프로그래머들이 사용할 수 있는 프로그래밍 언어는 없었고, 그 어떤 프로그래밍 언어도 이렇게 많은 오픈 소스 프레임워크를 파생시킬 수 없었습니다.

자바 언어는 매우 순수한 객체지향 프로그래밍 언어로, C언어와 C++언어의 다양한 장점은 그대로 살리면서 C++언어에서 다중상속, 포인터 등 이해하기 어려운 개념을 버렸다. Java 언어는 강력하며 단순성과 사용 용이성은 두 가지 매우 좋은 특징입니다. 정적 객체지향 프로그래밍 언어의 대표자인 Java 언어는 객체지향 이론을 훌륭하게 구현하고 프로그래머가 보다 우아한 사고 방식으로 보다 복잡한 프로그래밍 개발을 수행할 수 있도록 해줍니다.

뿐만 아니라 Java 언어의 관련 Java EE 사양에는 오늘날 가장 널리 사용되는 소프트웨어 엔지니어링 개념이 포함되어 있으며 Java EE 사양, 플랫폼 및 관련 프레임워크에서 다양한 고급 디자인 아이디어를 구현할 수 있습니다. 자바 언어 관련 지식의 다양한 측면을 능숙하게 학습한다는 것은 단순히 프로그래밍 언어를 배우는 것이 아니라 소프트웨어 개발 관련 지식을 체계적으로 배우는 것과 같다.

오늘날 대부분의 은행, 통신, 증권, 전자상거래, 전자정부 및 기타 시스템은 Java EE 플랫폼을 사용하여 구축되었거나 점차 Java EE 플랫폼으로 전환하고 있습니다. Java EE 사양은 현재 가장 성숙한 사양입니다. 또한 가장 널리 사용되는 엔터프라이즈 수준 애플리케이션 개발 사양입니다.

2.2스윙 구성 요소 소개

    Swing API는 JAVA 기반 프런트엔드/GUI 애플리케이션을 생성하기 위한 확장 가능한 GUI 구성요소 세트입니다. 이는 AWT API 위에 구축되었으며 그 안의 거의 모든 컨트롤이 AWT 컨트롤에 해당하므로 AWT API를 대체하는 역할을 합니다. Swing 구성요소는 모델-뷰-컨트롤러 아키텍처를 따라 다음 지침을 충족합니다. 단일 API는 다양한 모양과 스타일을 지원하기에 충분합니다. API는 모의 중심이므로 최고 수준 API에는 데이터가 필요하지 않습니다. API는 Java Bean 패턴을 사용하므로 빌더 도구 및 IDE가 더 나은 기능을 제공할 수 있습니다. 개발자가 이를 사용할 수 있도록 서비스를 제공합니다.

    Swing API 아키텍처는 다음과 같은 방식으로 느슨하게 기반을 둔 MVC 아키텍처를 따릅니다. 모델은 구성 요소의 데이터를 나타냅니다. 뷰는 구성 요소 데이터의 시각적 표현을 나타냅니다. 컨트롤러는 뷰에서 사용자 입력을 받아들이고 구성 요소 데이터의 변경 사항을 반영합니다. 스윙 구성 요소는 모델을 별도의 요소로 처리하고 보기 및 컨트롤러 부분을 사용자 인터페이스 요소로 결합합니다. 이 접근 방식을 사용하면 Swing은 플러그형 모양과 느낌의 아키텍처를 갖게 됩니다. 스윙의 주요 기능은 다음과 같습니다.

    경량 - Swing 구성 요소는 기본 운영 체제 API와 독립적입니다. 왜냐하면 Swing API 컨트롤은 일반적으로 기본 운영 체제 호출을 사용하는 대신 순수 JAVA 코드를 사용하여 렌더링되기 때문입니다.

    풍부한 컨트롤 - Swing은 트리, 탭 양식, 슬라이더, 색상 선택기 및 테이블 컨트롤과 같은 풍부한 고급 컨트롤 세트를 제공합니다.

    고급 사용자 정의 - 시각적 모양이 내부 표현과 독립적이기 때문에 스윙 컨트롤은 매우 간단한 방법으로 사용자 정의할 수 있습니다.

    플러그형 모양과 느낌 - Swing 기반 GUI 애플리케이션의 모양과 느낌은 유효한 값에 따라 런타임 시 변경될 수 있습니다.

2.3 Eclipse 개발 플랫폼 소개

Eclipse는 고도로 통합된 도구 개발을 위한 모든 기능을 갖춘 상용 품질의 산업용 플랫폼을 제공하는 데 중점을 둔 오픈 소스 Java 기반 확장 가능 개발 플랫폼입니다. Eclipse는 플러그인 컴포넌트를 통해 개발 환경을 구축하기 위한 프레임워크이자 서비스 세트입니다. Eclipse에는 JDT(Java Development Tools)를 포함한 표준 플러그인 세트가 함께 제공됩니다.
  Eclipse는 1999년 4월에 시작되었으며 원래 IBM에서 상용 소프트웨어인 Visual Age for Java를 대체하기 위한 차세대 IDE 개발 환경으로 개발되었으며, IBM은 2001년 11월 Platform, JDT, PDE를 포함한 초기 Eclipse 코드 베이스를 제공했습니다. 현재 IBM이 주도하고 있는 오픈소스 커뮤니티에 Eclipse 프로젝트는 Borland, Rational Software, Red Hat, Sybase 등 150개 이상의 소프트웨어 회사가 Eclipse 프로젝트에 참여하는 거대한 Eclipse 동맹으로 발전했으며, 현재는 비영리 소프트웨어 공급업체 연합인 Eclipse Foundation이 관리하고 있습니다. 2003년 Eclipse 3.0에서는 OSGi 서비스 플랫폼 사양을 런타임 아키텍처로 선택했습니다. 2007년 6월에는 안정 버전 3.3이 출시되었습니다. 코드명 Ganymede인 버전 3.4는 2008년 6월에 출시되었습니다.
  Eclipse는 잘 알려진 크로스 플랫폼 무료 통합 개발 환경(IDE)으로 원래 주로 Java 언어 개발에 사용되었지만 현재는 플러그인을 사용하여 다른 컴퓨터 언어의 개발 도구로 사용하는 사람들도 있습니다. C++ 및 Python. Eclipse는 원래 플러그인 개발 환경(Plug-in Development Environment, PDE)을 제공하는 프레임워크 플랫폼이었습니다. 이 구성 요소는 주로 Eclipse를 확장하여 Eclipse와 원활하게 통합되는 도구를 구축하려는 소프트웨어 개발자를 대상으로 합니다. Eclipse 환경 많은 플러그인을 지원하므로 Eclipse는 상대적으로 고정된 기능을 가진 다른 IDE 소프트웨어가 갖기 어려운 유연성을 가지고 있습니다. Eclipse의 모든 것이 플러그인이므로 Eclipse용 플러그인을 제공하면 사용자에게 일관되고 통합된 통합 개발 환경이 제공되므로 모든 도구 개발자가 동등한 위치에서 작업할 수 있습니다.

이클립스의 장점:

현재 전 세계 수백만 명의 사람들이 개발을 위해 Eclipse를 사용하고 있습니다. Eclipse에는 왜 그렇게 많은 팬이 있습니까? 이는 많은 기능을 하나로 통합하는 Eclipse와 많은 관련이 있습니다.

    Eclipse는 오픈 소스 소프트웨어입니다. 이는 Eclipse를 무료로 사용할 수 있을 뿐만 아니라 소스 코드를 연구하여 세계 최고의 개발자의 프로그래밍 기술을 배울 수 있고 전 세계 개발자가 기여한 공개 오픈 소스 코드 라이브러리를 공유할 수 있음을 의미합니다.

    Eclipse는 실제로 확장 가능하고 구성 가능합니다. Eclipse는 꽃병과 같은 플러그인 메커니즘을 사용하므로 언제든지 꽃병에 꽃을 추가할 수 있고 더 이상 필요하지 않은 꽃을 쉽게 꺼낼 수도 있습니다. 현재 인터넷 곳곳에는 무료와 유료 플러그인이 꽃피우고 있고, 국내외에서도 플러그인 개발 작업이 한창이다.

Eclipse는 Java뿐만 아니라 다양한 개발 언어를 지원합니다. Eclipse는 개발자에게 시스템 기능을 확장할 수 있는 최소한의 코어만을 제공하며, 확장 포인트 기반의 플러그인 아키텍처를 통해 Eclipse는 다국어 지원이 가능합니다. 해당 언어에 대한 플러그인이 설치되어 있으면 Eclipse는 해당 언어의 개발을 지원할 수 있습니다. 현재 Eclipse는 C/C++, COBOL, PHP, Perl, Python 및 기타 언어를 지원할 수 있습니다. (Eclipse는 기본적으로 Java 개발 환경이지만 해당 아키텍처는 다른 프로그래밍 언어에 대한 지원을 보장합니다.)

   Eclipse는 여러 플랫폼 기능을 지원합니다. 개발자는 Windows, Linux, MacOS 등 가장 편안하고 친숙하다고 느끼는 플랫폼을 사용할 수 있습니다. Eclipse에는 각 플랫폼마다 별도의 그래픽 툴킷이 있어 애플리케이션에 거의 기본 운영 체제 모양과 더 나은 성능을 제공합니다.

 업계 최고의 OSGi 사양을 기반으로 합니다. OSGi 사양은 1999년 Sun Microsystems, IBM, Ericsson 등에 의해 처음 출시되었습니다. 해당 서비스 플랫폼에는 서비스 게이트웨이, 자동차, 휴대폰, 산업 자동화, 빌딩 자동화, PDA 그리드 컴퓨팅, 엔터테인먼트(예: iPronto) 및 IDE가 포함됩니다. , 등. OSGi 기반 시스템은 마이크로커널 형태로 실행되므로 핫스왑이 가능하고 동적으로 변화하는 동작, 소프트웨어 업계가 꿈꾸는 안정적이고 효율적인 시스템을 쉽게 실현할 수 있습니다. 3.1부터 Eclipse는 업계에서 인정받은 원래 프레임워크를 단호히 버리고 OSGi를 아키텍처로 채택했습니다. Eclipse3.2부터 Eclipse는 OSGi 기반 개발을 지원하며, 개발자는 이를 활용하여 OSGi 기반 시스템을 개발할 수 있습니다.

   Eclipse의 아름다운 인간-기계 인터페이스는 널리 호평을 받았습니다. Eclipse는 SWT/Swing의 단조롭고 지루한 인터페이스 스타일을 변경하는 새로운 SWT/JFace API(AWT/Swing 대신)를 제공하여 마치 봄바람이 불어오는 것처럼 풍부한 그래픽 인터페이스를 갖춘 로컬 기반 애플리케이션을 개발할 수 있게 해줍니다. 자바 데스크탑 개발 분야는 사람들에게 신선한 느낌을 줍니다.

   Eclipse는 업계 리더들에 의해 출시되었으며 업계에서 강력한 영향력을 갖고 있습니다. Eclipse 재단은 Eclipse의 장기적인 계획 및 개발을 주도하고 Eclipse가 소프트웨어 도구 산업에서 선두 위치에 있도록 보장하기 위해 수많은 학술 연구 기관 및 상업 조직을 흡수했습니다.

2.4 시스템 플랫폼 환경 :

2.4.1 하드웨어 플랫폼:

   이 프로그램으로 개발된 컴퓨터 하드웨어는 다음과 같습니다.

메모리: 4G

하드 드라이브: 500G

CPU: Intel(R)Core(TM)i5—3230M CPU @2.60GHz

대화형 도구: 키보드, 마우스

디스플레이: LCD 디스플레이

2.4.2 소프트웨어 플랫폼:

본 시스템의 개발 환경은 다음과 같습니다   

운영 체제: Microsoft Windows 7 Ultimate

JDK 버전: jdk-8u121-windows-x64

Eclipse 버전: Neon.2 릴리스(4.6.2), eclipse-inst-win64

시스템 분석

시스템 분석은 시스템 요구 사항 분석 및 타당성 분석을 포함하여 소프트웨어 개발 프로세스에서 우리가 취하는 첫 번째 단계입니다. 시스템 요구사항 분석은 주로 시스템이 무엇인지, 어떤 용도로 사용해야 하는지 설명하고, 이 문제에 대해 개발자와 주요 사용자 간의 합의에 도달하는 데 사용됩니다. 시스템의 타당성 분석은 주로 시스템의 모든 자원의 구현을 분석하여 시스템 개발 및 투자의 합리성, 타당성 및 불가피성을 설명하고, 발생할 수 있는 예상치 못한 문제를 합리화하는 분석입니다. 소프트웨어 개발에 있어서 가장 어려운 부분은 시스템 수요 분석인데, 수요 분석에 소요되는 시간은 의심할 바 없이 매우 귀중하다. 시스템 요구사항 분석과 타당성 분석을 잘 수행하면 소프트웨어 개발 프로세스의 편의성이 향상되고, 소프트웨어 개발 프로세스에 대한 실시간 모니터링 및 관리가 가능해지며, 계획대로 진행되기 쉬워져 개선 목적을 달성하게 된다. 소프트웨어의 품질 프로그램 개발자, 사용자 등에게 더 많은 이동 가능한 통신 및 협력을 제공합니다. 작업 결과의 원래 기초로서 시스템 요구 분석 및 타당성 분석은 잠재적 사용자에게 시스템 기능을 간접적으로 표현할 수도 있으며 이를 통해 사용자는 시스템 기능이 달성 요구 사항을 충족하는지 판단할 수 있습니다.

3.1 타당성 분석

타당성 분석은 시장 수요, 자원 공급, 건설 규모, 공정 경로, 장비 선택, 환경 영향, 자금 조달 등 기술, 경제, 엔지니어링, 기술 등 측면에서 프로젝트의 주요 내용 및 지원 조건을 기반으로 합니다. , 수익성 등 기타 측면에 대한 연구, 분석 및 비교, 프로젝트 완료 후 달성될 수 있는 재정적, 경제적, 사회적 환경 영향 예측, 프로젝트에 투자할 가치가 있는지 여부, 프로젝트 결정을 협의하고 구성하는 방법 등은 다음과 같은 기초를 제공합니다. 포괄적인 시스템 분석 방법. 타당성 분석은 원시적이고 공정하며 신뢰할 수 있고 과학적이어야 합니다.

타당성 조사 업무의 과학성, 객관성, 공정성을 확보하고 오류 및 누락을 효과적으로 방지하기 위해서는 타당성 조사에 있어서 먼저 객관적이고 공정한 입장에서 조사와 연구를 수행하고 기초자료 수집을 잘 수행해야 합니다. 수집된 기초자료는 객관적인 경제법칙을 진실되게 반영하고, 객관적인 실태를 바탕으로 입증 및 평가되어야 하며, 객관적인 데이터와 과학적 분석을 통해 프로젝트의 타당성에 대한 결론을 도출해야 합니다.

타당성 조사 보고서의 내용 깊이는 국가가 규정한 기준에 부합해야 하며, 기본 내용이 완전해야 하며, 허술한 작업과 형식주의를 피하기 위해 최대한 많은 데이터를 사용해야 합니다.

실증을 먼저 하고 의사결정을 하며, 사업 제안, 타당성 조사, 평가의 3단계 관계를 적절하게 처리하고, 연구는 실현 불가능하다고 판단되면 어느 단계에서든 중단해야 하며, 연구는 어느 단계에서든 중단해야 한다. 조사와 연구가 수행되어야 합니다. 데이터 선택의 포괄성, 중요성, 객관성 및 연속성을 보장하고 여러 옵션을 비교하여 최선의 것을 선택하려면 실용적이고 신뢰할 수 있는 정보를 숙지해야 합니다. 외국 관련 프로젝트나 WTO 가입 등 외부 요인의 압력으로 인해 외국 기준을 준수해야 하는 프로젝트의 경우, 타당성 조사의 내용과 깊이가 가능한 한 국제 기준과 일치해야 합니다.

타당성 조사의 품질을 보장하기 위해서는 컨설팅 설계 단위의 충분한 작업주기가 보장되어 다양한 이유로 인한 무책임하고 성급한 행동이 방지되어야 합니다.

타당성 분석의 목적은 문제가 최단 시간과 최저 비용으로 해결될 수 있는지 여부를 판단하는 것입니다. 타당성 분석의 주요 포인트는 문제를 해결하는 것이 아니라 이러한 문제가 연구하고 해결하기 위해 인적, 재정적 자원을 투입할 가치가 있는지 여부를 연구하는 것입니다. 간단하고 쉬운 방법이 있다면 그렇습니다.

3.1.1 경제성 분석

    시스템의 경제성 분석의 목적은 개발, 구축, 시스템 운영까지 소요되는 자본투자와 새로운 시스템의 시장수요 및 경제적 이익을 계산하고, 투자예산과 기대효과를 비교하여 계산하는 것이다. 경제적 비용 타당성.

이 게임 시스템은 주로 대학생을 위한 소프트웨어 공학 졸업과정 설계에 사용되며, 이를 통해 창출할 수 있는 경제적 이익과 향후 게임 개발 상황을 고려할 필요가 없다. 게임 시스템 자체에 대한 경제적 요구사항은 높지 않지만, 이 게임 시스템의 개발을 통해 학생들의 지식과 능력 수준이 향상된다. JDK 운영 환경이 설치된 컴퓨터와 자바 개발 도구인 Eclipse 소프트웨어만 있으면 되기 때문에 경제적 문제를 고려할 필요가 없습니다.

3.1.2 기술적 타당성 분석

테트리스 게임을 작성하는 데 사용할 수 있는 프로그래밍 언어는 다양하며, 본 주제에서는 주로 Java 기반 환경에서 게임 시스템을 개발하는 것에 대해 다루므로 이 시스템에서는 주로 Java에서 Swing 구성요소를 사용하여 개발하며, 변수 정의와 변수 정의가 필요합니다. 초기화, 인터페이스 디자인, 게임 초기화, 게임 진입, 게임 종료, 게임 중 각종 조작 처리, 해당 기능에 대한 코드 요구사항 수행 등 기술적인 요구사항은 특별히 어렵지 않고 기술적으로 실현 가능합니다.

3.1.3 사회적 타당성 분석

이 게임 시스템의 개발은 주로 졸업 과정 설계 및 논문 작성에 사용되어 4년 간의 대학 학습 지식을 통합합니다. 주로 개인 및 학교를 대상으로 하며 개인 엔터테인먼트 및 학교 과정 설계 및 졸업 논문 확인에만 사용됩니다. 사회에 아무런 영향을 미치지 않으므로 법적, 저작권, 기타 사회적 요소를 고려할 필요가 없다는 점에서는 충분히 가능합니다.

3.2 요구사항 분석

    소위 '니즈 분석'이란 해결해야 할 문제를 자세히 분석하여 어떤 데이터를 입력해야 하는지, 어떤 결과를 얻어야 하는지, 최종적으로 무엇을 출력해야 하는지 등 문제의 요구 사항을 명확히 하는 것을 말합니다. 소프트웨어 공학에서 "분석이 필요하다"는 것은 컴퓨터가 "하는 일"과 그것이 달성하는 효과를 결정하는 것이라고 말할 수 있습니다. 시스템이 완성되기 전에 요구사항 분석이 완료된다고 할 수 있습니다.

    소프트웨어 엔지니어링에서 요구사항 분석은 새 시스템을 만들거나 기존 컴퓨터 시스템을 변경할 때 새 시스템의 목적, 범위, 정의 및 기능을 설명하는 데 필요한 모든 작업을 의미합니다. 요구사항 분석은 소프트웨어 엔지니어링의 핵심 프로세스입니다. 이 과정에서 시스템 분석가와 소프트웨어 엔지니어는 고객의 요구 사항을 결정합니다. 이러한 요구 사항이 식별된 후에만 새 시스템에 대한 솔루션을 분석하고 추구할 수 있습니다. 요구사항 분석 단계의 임무는 소프트웨어 시스템의 기능을 결정하는 것입니다.

    소프트웨어 엔지니어링의 역사에서 사람들은 항상 요구사항 분석이 소프트웨어 엔지니어링의 가장 간단한 단계라고 믿어왔습니다. 그러나 지난 10년 동안 분석이 필요한 프로세스가 가장 중요한 프로세스라는 사실이 점점 더 많이 인식되었습니다. 분석가가 수요 분석 중에 고객의 요구 사항을 올바르게 이해하지 못하면 최종 소프트웨어가 고객의 요구 사항을 실제로 충족하지 못하거나 소프트웨어 프로젝트가 지정된 시간 내에 완료되지 않습니다.

3.2.1 기능적 요구사항

    전체 게임 시스템은 4개의 작은 블록으로 구성된 7개의 서로 다른 모양의 블록을 무작위로 생성합니다. 회전 후 28개의 상태를 획득합니다. 게임 난이도가 높아지면 6개의 서로 다른 모양의 블록이 추가됩니다. 회전 후 24개의 유형이 생성됩니다. 추가됨. 블록은 일정한 속도로 자유롭게 낙하하며, 플레이어는 키보드의 상하좌우 키를 통해 블록의 좌우 이동과 회전을 제어하고, 낙하한 후 블록을 적절한 위치에 배치합니다. 블록이 떨어질 때, 블록이 떨어진 후 전체 행이 블록으로 채워지면 전체 행이 제거됩니다. 한 행이 제거되면 플레이어의 점수가 10점 증가하며, 점수가 100점에 도달하면 플레이어의 레벨이 한 단계 증가하고 속도가 한 단계 증가하며 난이도가 증가합니다. 블록이 떨어진 후 전체 게임 캔버스 인터페이스가 점유되면 블록은 더 이상 떨어지지 않으며 게임은 실패합니다. 게임의 구체적인 기능 요구 사항은 다음과 같습니다.

    ▪ 게임 인터페이스 요구 사항: 좋은 게임 인터페이스는 플레이어의 눈을 빛나게 하고 게임이 제공하는 즐거움과 휴식을 충분히 느낄 수 있게 합니다. 이 게임의 기본 배경색은 진한 녹색입니다. 게임의 메인 인터페이스 화면은 원하는 사진으로 사용자 정의하고 변경할 수 있습니다. 메인 인터페이스 사각형의 기본 색상은 주황색이고, 사전 표시 사각형의 기본 색상은 다음과 같습니다. 라벤더. 배경색과 전경색의 대비가 뚜렷하여 플레이어의 눈이 더욱 밝아지며, 게임이 높은 레벨에 도달하고 블록이 떨어지는 속도가 증가하면 플레이어는 떨어지는 블록의 모양을 명확하게 구분할 수 있어 게임의 분위기가 높아집니다. 게임. 짜증나.

    ▪ 게임 형태 요구사항: 배열을 데이터 구조로 사용하여 블록의 52가지 상태, 즉 1차 레벨 긴 막대, Z자형, 역Z자형, 필드형, 7자형 등 총 7가지 형태를 저장합니다. , 역 7자형, T자형 4방향 회전 변형, 중간 수준의 블록 3개와 상태 12개, 고급 수준의 블록 12개 상태. 각 블록은 시계 반대 방향으로 회전할 수 있으며, 블록의 회전 가능 여부는 조건에 따라 판단해야 하며, 블록이 회전 후 경계를 넘을 수 있으면 회전할 수 없으며 회전할 수 있도록 위치를 조정해야 합니다.

    ▪ 키보드 처리 이벤트 요구 사항: 블록이 떨어질 때 플레이어는 키보드의 방향 키를 사용할 수 있습니다. 위쪽 키는 회전, 아래쪽 키는 낙하 가속, 왼쪽 키는 왼쪽으로 이동, 오른쪽 키는 오른쪽으로 이동, 원 클릭 하강을 구현하는 스페이스 바 문자 P 키는 일시 중지를 구현하고 문자 C 키는 계속과 같은 일련의 작업을 구현합니다.

    ▪ 마우스 처리 이벤트 요구 사항: 마우스를 사용하면 제어판의 메뉴 버튼과 도움말 버튼을 클릭하고, 메뉴 표시줄에서 메뉴 항목을 선택하고, 게임을 시작하고, 게임 레벨을 선택하고, 블록의 색상 표시를 변경할 수 있습니다. 게임 및 메인 게임 인터페이스의 배경 색상 및 전경 색상 표시, 게임 배경 이미지 변경, 블록 낙하 속도, 게임 내 사운드 재생 여부 및 일련의 기능.

▪ 표시 요구 사항: 이 게임 프로그램의 표시 요구 사항은 블록이 떨어지고 전체 행을 채울 때 행이 제거되고 채워지지 않은 나머지 행은 자동으로 하나씩 아래로 이동한다는 것입니다. 행을 제거하면 점수가 증가합니다. 오른쪽 인터페이스는 10점씩 증가하며, 점수가 100점으로 증가하면 레벨이 한 단계 증가합니다. 블록이 떨어지고 메인 인터페이스의 모든 행에 겹쳐지면 블록은 더 이상 떨어지지 않고 게임이 종료되며 메인 인터페이스에 "Game Over"라는 단어가 표시됩니다.

3.2.2 비기능적 요구사항

비기능적 요구 사항: 테트리스 게임 시스템의 비기능적 요구 사항에는 게임 메인 인터페이스의 왼쪽 상단에 아이콘 표시, 최대화 및 최소화를 위한 창 크기 조정(메인 인터페이스의 크기는 포함되지 않음), 게임 실행 시 팝업 창 위치 비기능적 요구 사항 집합입니다.

3.2.3  인터페이스 제어

Windows 운영 체제에서 이 러시아 게임 시스템은 주로 키보드를 통해 게임을 작동합니다.

마우스를 사용하여 시작, 종료, 설정 등 일련의 작업을 수행할 수 있습니다. 우선, 게임은 키보드 키를 사용하여 게임을 조작하므로 키보드 인터페이스 이벤트를 사용해야 합니다. 둘째, 게임이 진행되는 동안 시작, 레벨 선택, 설정 변경, 색상 변경, 버전 정보 보기, 종료 등 게임을 제어하기 위해 마우스를 사용해야 하므로 인터페이스를 추가해야 합니다. 마우스 클릭 및 버튼에 대한 이벤트를 모니터링합니다. , 해당 코드를 작성하여 마우스 및 키보드의 해당 기능을 구현합니다.

시스템 개요 설계

4.1  시스템의 기능적 설계

4.1.1  수작업 업무 처리의 기본 프로세스

    이 게임은 엔터테인먼트를 본연의 의도로, 퍼즐을 목적으로 하여 설계되었으며, 기존의 고전 테트리스 게임의 기능을 종합적으로 연구하고 새로운 게임을 출시하며 새로운 기능을 추가하여 새로운 활력과 활력을 부여합니다. 게임의 기본적인 과정은 아래에 자세히 설명되어 있습니다.

   운영 지침:

   1>프로그램을 실행하고 오른쪽 제어판에서 "시작"을 클릭하거나 "제어" 메뉴에서 "시작" 버튼을 클릭하여 게임을 시작합니다.

   2> 상하좌우키와 스페이스바, P키, C키를 이용하여 블록의 변형, 하강, 좌우이동과 급속하강, 일시정지, 계속을 원클릭으로 제어합니다.

   3> 한 줄의 블록을 모두 제거하면 점수가 자동으로 올라가고 레벨도 자동으로 한 레벨씩 늘어납니다.

   4>레벨이 증가하고 블록의 낙하 속도가 증가함에 따라 오른쪽 제어판 또는 "게임" 메뉴에서 "초급", "중급" 및 "고급" 버튼을 눌러 게임 난이도를 수동으로 변경합니다. "블록 색상" 메뉴의 옵션을 클릭하여 블록 색상 등을 변경할 수도 있습니다. 또한 "사용자 정의" 메뉴의 옵션을 통해 게임의 일부 속성을 변경할 수도 있습니다.

   5> 게임을 일시 정지하려면 키보드의 P 키를 누르고, 게임을 계속하려면 C 키를 누릅니다. "게임 종료" 버튼을 누르면 진행 중인 게임이 완전히 중단되며, "제어" 메뉴에서 "시작" 또는 "다시 시작"을 누르면 새로운 게임이 시작됩니다.

   6>블록이 전체 창을 차지하고 더 이상 새로운 블록이 떨어질 수 없는 경우 게임은 "Game Over(게임 종료)" 대화 상자를 표시하여 게임을 종료하라는 메시지를 표시합니다.

게임의 기본 흐름도는 그림 4-1에 나와 있습니다.

                        그림 4-1 게임의 기본 흐름도

4.1.2  기본 프로세스의 기능 모듈

이 시스템은 게임의 다양한 기능을 기반으로 게임의 각 기능 모듈을 설계합니다. 그림 4-2는 이 게임의 시스템 기능 모듈에 대한 개략도입니다. 그림에 표시된 것처럼 이 게임은 주로 게임 인터페이스 영역과 게임 제어 영역의 두 가지 모듈로 구성됩니다. 게임 인터페이스는 플레이어의 선택적 작업 표시와 플레이어 작업 결과 표시의 두 부분으로 나뉩니다. 게임 제어는 색상 변경, 시작, 게임 레벨을 초급으로 변경, 게임 레벨을 중급으로 변경, 게임 레벨을 고급으로 변경, 낙하 속도 사용자 정의, 배경 변경, 종료 등과 같은 일부 기능 모듈로 구분됩니다.

그림 4-2 시스템 기능 모듈의 개략도

    그림 4-3은 게임 인터페이스 영역 모듈 설계의 개략도입니다. 그림에 표시된 것처럼 게임 인터페이스 영역 모듈은 새 게임 인터페이스 진입, 플레이어 작업 처리, 플레이어 작업 결과 표시의 세 가지 기능 모듈로 나눌 수 있습니다. .

그림 4-3 인터페이스 모듈의 개략도

    그림 3-4는 게임 제어 영역 설계의 개략도로서, 그림에 도시된 바와 같이 게임 제어 영역 모듈은 시작, 사용자 정의 동작 설정, 초기 게임 레벨 설정, 초기 색상 설정, 종료 등의 기능 모듈로 구분됩니다. .

그림 4-4 제어 영역 모듈의 구성도

시스템의 세부 설계 및 구현

    Java는 순수한 객체 지향(객체 지향) 프로그래밍 언어이므로 여기서는 Java의 많은 장점에 대해 자세히 설명하지 않습니다. 객체 지향 개념에서 시작하여 이 프로그램은 주로 다음 모듈로 나눌 수 있습니다.

    ●게임 메인 인터페이스 디스플레이 모듈

    ●블록 및 데이터 표시 모듈

    ●블록 이동 제어 모듈

    ●게임 인터페이스 색상 제어 모듈

    ●게임 진행 및 레벨 제어 모듈

    객체를 분석하는 기술은 기능적 확장성과 유지 관리 효율성에 있습니다. 상상해 보십시오. 외부 환경이나 사용자 요구의 변화로 인해 프로그램의 기능을 확장하거나 유지해야 한다면 코드를 대폭 변경하거나 심지어 다시 작성해야 하므로 객체 지향의 장점은 상실됩니다. 이므로 본 프로그램을 분석할 때 프로그램의 확장성과 유지보수성을 향상시키기 위해 독립성이 높은 모듈을 객체로 사용합니다. 게임 내 클래스의 디자인은 다음과 같습니다.

    MyFrame 클래스 : JFrame 클래스를 상속받아 게임의 메인 클래스로 게임 본체를 제어하고, 각 클래스의 허브를 연결하고 지휘하는 역할을 담당한다.

    PreView 클래스: JPanel 클래스에서 상속되며 조작 패널 클래스로 게임 프로세스를 제어하기 위한 메인 게임 창, 점수판, 레벨 제어 버튼 및 기타 창을 배치하는 역할을 담당합니다.

    GameCanvas 클래스: JPanel 클래스에서 상속받은 ChangeBlockColor 스레드 클래스는 캔버스 클래스의 사각형 색상을 동적으로 변경하며, 캔버스 클래스는 사각형 색상을 확인하여 ChangeBlockColor 사각형의 이동 및 제거를 반영합니다.

    Box 클래스 : Box를 구성하는 기본 요소인 Square 클래스로, 주로 색상을 표현합니다.

    블록 클래스 : 블록을 조작하는 클래스로 블록의 이동, 낙하, 변형 등을 제어한다.

5.1  게임 메인 인터페이스 디스플레이 모듈

    우수한 소프트웨어 시스템은 핵심 기능의 다양성과 위력만을 반영하는 것이 아니라, 사용자가 지루하고 오래된 인터페이스에 직면하게 되면 그 소프트웨어 시스템은 성공하지 못할 것입니다. .인터페이스 디자인은 매우 중요한 연결고리입니다. 플레이어를 위한 합리적인 레이아웃과 좋은 시각 효과를 갖춘 인터페이스를 디자인하고 제작하는 것의 중요성은 자명합니다.

게임의 메인 인터페이스는 Swing 컴포넌트를 이용하여 개발하고 여기에 리스너를 등록하여 다양한 제어 기능을 구현하는데, 게임 형태의 디자인에 따라 최소 3개 이상의 리스너, 즉 액션 리스너(ActionListener)를 등록해야 합니다. 및 키보드 리스너 리스너(KeyListener), 옵션 리스너(ItemListener).

    예비 설계에 따르면 클라이언트에서 사용할 Swing 컴포넌트 객체에는 JFrame 객체, JPanel 객체, JLabel 객체, JButton 객체, JMenuBar 객체, JMenu 객체, JMenuItem 객체, JTextField 객체, JTextArea 객체, JDialog 객체가 포함되는 것으로 결정될 수 있습니다. 객체 등 최소 10개의 Swing 구성 요소 객체. 아래 그림 5-1은 게임의 메인 인터페이스 스크린샷이다.

그림 5-1 게임 메인 인터페이스 스크린샷

이 게임의 메인 인터페이스 디자인의 초기 색상 매칭은 선명한 대비의 원리를 기반으로 합니다. 기본 배경색은 진한 녹색입니다. 테트리스 아이콘은 왼쪽 상단에 설정됩니다. 점수의 초기 값은 0, 레벨의 초기값은 1이고, 최고 점수 기록의 초기값은 0이다. 메인 게임 형태의 크기는 (520, 580)으로 설정하고, 블록 이동 범위 창은 20행 12열의 2차원 배열로 제어하며, 좌측 상단 아이콘은 블록 패턴으로 설정 식별 목적으로.

5.2  캔버스 및 박스 디스플레이 모듈

이 게임에서는 캔버스가 사용자 정의 그림으로 설계되었습니다. 필요에 따라 배경 그림을 직접 변경할 수 있습니다. 블록이 떨어지는 과정에서 색상 변화에 따라 떨어지는 블록을 식별합니다.

5.2.1  배경 캔버스 모듈 디자인

게임의 메인 배경 캔버스는 20행 12열의 2차원 배열입니다. 정사각형 디스플레이는 해당 색상 변경으로 식별됩니다. 메인 양식은 색상으로 채워져 배경 스타일과 정사각형을 형성합니다. 이 게임은 JPanel에서 상속받은 GameCanvas 클래스를 사용하여 배경 캔버스의 표시를 제어합니다. Rows는 캔버스의 행 수를 나타내고 cols는 캔버스의 열 수를 나타냅니다. 행과 열의 수에 따라 사각형의 수가 결정됩니다. 캔버스가 있습니다. 배경 캔버스의 주요 구현 코드는 다음과 같습니다.

먼저 캔버스 클래스의 생성자를 사용하여 전체 기본 인터페이스의 행, 열 및 기본 테두리 수를 나타냅니다.

다음의 상대적 위치:

       /**

        * 캔버스 클래스의 생성자

        * @param 행 int, 캔버스의 행 수

        * @param cols int, 캔버스의 열 수

        * 행과 열의 수에 따라 캔버스의 정사각형 수가 결정됩니다.

        */

       공개 GameCanvas(int 행, int 열) {

              this.rows = 행;

              this.cols = 열;

              this.setOpaque(false);

              상자 = 새 상자[행][열];

              for (int i = 0; i < box.length; i++) {

                     for (int j = 0; j < 상자[i].length; j++) {

                            상자[i][j] = 새 상자(false);

                     }

              }

              setBounds(0, 0, 300, 500);//상대 위치 좌표 설정

              setBorder(새 EtchedBorder(

                      EtchedBorder.RAISED, Color.white, new Color(148, 145, 140)));

       }

       /**

        * 캔버스에 있는 사각형의 행 수를 가져옵니다.

        * @return int, 그리드의 행 수

        */

       공개 int getRows() {

              행을 반환합니다.

       }

       /**

        * 캔버스의 열 수를 가져옵니다.

        * @return int, 그리드의 열 수

        */

       공개 int getCols() {

              열 반환;

       }

    둘째, 전체 기본 인터페이스의 전경색과 배경색을 나타내고 해당 전경색과 배경색을 가져오도록 캔버스 클래스의 생성자를 설정합니다.

       /**

        * 캔버스 클래스의 생성자

        * @param 행은 public GameCanvas(int 행, int cols)와 동일합니다.

        * @param cols는 public GameCanvas(int 행, int cols)와 동일합니다.

        * @param backColor 색상, 배경색

        * @param frontColor Color, 전경

        */

       공개 GameCanvas(int 행, int 열,

                         뒷면 컬러Color, 앞면 컬러Color) {

              this(행, 열);

              this.backColor = 백컬러;

              this.frontColor = 프론트컬러;

       }

       /**

        * 게임 배경색 설정

       * @param backColor 색상, 배경색

        */

       공공 무효 setBackgroundColor(색상 backColor) {

              this.backColor = 백컬러;

       }

       /**

        * 게임 배경색 얻기

       * @return 색상, 배경색

        */

       공개 색상 getBackgroundColor() {

              뒤로돌아가기색상;

       }

5.2.2  블록 모듈 설계 미리보기

블록과 데이터 정보는 게임의 가장 기본적인 기능 모듈입니다. Box는 블록을 구성하는 기본 요소로 블록을 구성하는 기본 요소로 블록의 외형을 고유한 색상으로 표현하며, MyTask는 TimerTask 클래스를 상속받아 위치를 측정하고 카운팅 방식을 사용하여 속도 변화를 구현한다. MyListener 클래스는 KeyAdapter 클래스를 상속하여 버튼 모니터링을 구현하고 블록의 위, 아래, 왼쪽 및 오른쪽을 제어합니다. 총 16개의 셀이 있는 4x4 정사각형 행렬을 정의합니다. "0"과 "1"을 사용하여 각 사각형이 새로운 색상으로 칠해졌는지 아니면 배경색을 유지하는지 나타냅니다.

새로운 블록을 얻을 때마다 7가지 형태의 블록 중 하나가 무작위로 선택됩니다. 게임은 새 블록의 모델을 나타내는 변수를 정의합니다. 예를 들어, 7개의 행과 4개의 열로 구성된 28가지 유형의 블록을 나타내도록 int 배열 STYLE을 정의하고 각 요소는 블록 중 하나를 나타냅니다. 즉, 0<=blockkindnum<=6, 0=<blockstatusnum<=3

그런 다음 블록이 떨어지고 새 블록을 가져와야 할 때 blockkindnum 및 blockstatusnum 값 쌍을 무작위로 얻은 다음 이 STYLE 값을 기반으로 해당 블록을 구성하면 됩니다. 남은 질문은 STYLE 행과 열 값 쌍을 무작위로 생성하는 방법입니다.

Java 언어 패키지의 Math 클래스는 난수 생성을 위한 Random() 메소드를 제공합니다. 이 메소드를 호출하면 0-1 사이의 배정밀도 부동 소수점 숫자가 생성됩니다. 따라서 새 블록을 얻고 싶을 때마다 이 메서드를 한 번만 호출하면 0에서 1까지의 배정밀도 부동 소수점 숫자를 얻은 다음 그 숫자에 7을 곱하고 정수로 변환하여 결과를 얻을 수 있습니다. 1부터 7까지의 정수. 행을 제어하는 ​​데 사용됩니다. 이 숫자에 4를 곱한 다음 정수로 캐스팅하여 열을 제어하는 ​​데 사용되는 1부터 4까지의 정수를 얻습니다.

이를 통해 여러 그래픽 정의를 결합할 수 있으며 코드를 사용하여 다음 기능을 구현할 수 있습니다.

1> 각 실행은 먼저 난수에 대해 서로 다른 초기 값을 생성합니다.

                  int col = (int) (Math.random() * (gc.getCols() - 3));//임의의 위치에 열 생성

                     int 스타일 = Constant.STYLES[(int) (Math.random() * Block.get_addl())][(int) (Math.random() * 4)];

그림 5-2 무작위로 생성된 블록의 흐름도

    2> 그림을 무작위로 선택합니다. 그림 5-2는 생성된 무작위 CNC를 구체적으로 설명하기 위해 블록 다이어그램을 무작위로 생성합니다.

결과 그래픽.

3>4*4 그리드에 있는 현재 그래픽의 위치 정보입니다.

    4행 4열 블록의 사전 표시 그리드를 그리고 사전 표시 블록 스타일을 무작위로 생성합니다. 이 게임은 2차원 배열을 사용하여 28가지 스타일의 블록을 저장합니다.

주목할 만한 점은 다음과 같습니다. 전통적인 테트리스 게임을 기반으로 혁신적인 사고를 반영하고 학습 원칙에 따라 이 게임 시스템은 중급 수준에 세 가지 다른 블록 스타일을 추가하고 다음을 기반으로 세 가지 고급 수준을 추가합니다. 전통적인 게임, 다른 블록 스타일. 총 52개의 블록 스타일이 있으며, 구체적인 저장 방식에 대한 주요 구현 코드는 다음과 같습니다.

       /**

        *각각 13개 모델 52개 상태에 대응

        */

       public final static int[][] STYLES = {// 총 28개 주

              {0xf000, 0x8888, 0xf000, 0x8888}, // 긴 막대의 네 가지 상태

              {0x4e00, 0x4640, 0xe400, 0x4c40}, // 'T' 유형의 4가지 상태

              {0x4620, 0x6c00, 0x4620, 0x6c00}, // 역방향 'Z' 모양의 4가지 상태

              {0x2640, 0xc600, 0x2640, 0xc600}, // 'Z' 유형의 4가지 상태

              {0x6220, 0x1700, 0x2230, 0x7400}, // '7' 유형의 4가지 상태

              {0x6440, 0xe200, 0x44c0, 0x8e00}, // 역 '7' 유형의 4가지 상태

              {0x6600, 0x6600, 0x6600, 0x6600}, // 블록의 4가지 상태

              {0x8c88,0xf200,0x44c4,0x4f00},//중간 스타일 블록 3개 추가

              {0xea00,0xc4c0,0xae00,0xc8c0},

              {0x8c00,0xc800,0xc400,0x4c00},

              {0xac00,0xcc40,0x6e00,0x8cc0},//고급 스타일 블록 3개 추가

              {0x4e40,0x4e40,0x4e40,0x4e40},

              {0x8480,0xa400,0x4840,0x4a00},

       };

   전통적인 테트리스 게임의 7가지 블록 스타일은 많은 분들이 알고 계시리라 생각하므로, 일반적인 블록 스타일을 하나씩 보여드리기 위해 스크린샷을 찍지는 않겠습니다. 다음은 기존 게임 모드에 중간 난이도의 블록 모델 3개와 고급 난이도 3개가 추가된 것입니다.

    ●중급 난이도 블록 모델 3개 추가(90도, 180도, 270도, 360도 이후 4가지 회전 상태 획득 가능)

그림 5-10 세 가지 추가 중급 난이도 블록 모델

    ●고급 난이도 블록 모델 3개 추가(90도, 180도, 270도, 360도 이후 4가지 회전 상태 획득 가능)

그림 5-11 세 가지 추가 고급 난이도 블록 모델

5.2.3  블록 이동 및 회전 모듈 설계

블록을 뒤집고 이동하는 것은 상대적으로 구현하기 쉽습니다. 블록을 이동하려면 블록의 가로 좌표나 세로 좌표를 변경한 후 블록을 다시 그리기만 하면 됩니다. 블록을 뒤집으려면 배경 배열의 값을 변경하고 블록을 다시 그리기만 하면 됩니다.

이 게임의 블록이 떨어지면 동적 드로잉이 수행되고 Cloneable 인터페이스가 구현되어 Object.clone() 메서드가 필드별로 이 클래스의 인스턴스를 합법적으로 복사할 수 있음을 나타냅니다. 블록 작업 클래스 BlockOperation은 Thread 클래스를 상속하고 run() 메서드를 재정의하여 블록의 동적이고 정확한 위치를 실현합니다. 물론, 스레드 내에서는 블록이 이동 상태인지, 일시정지 상태인지를 판단해야 합니다.

공공 무효 실행()

       {

              //이동은 블록이 동적으로 떨어지는지 여부를 결정합니다.

              (이동하는 동안)

              {

                     노력하다

                     {

                            //betweenleveltime은 인접한 레벨 간의 시간 차이를 나타냅니다.

                            수면(레벨 시간 사이

                                    * (ControlMainGame.maxlevel - 레벨 + flatgene));

                     } 잡기(InterruptedException 즉)

                     {

                            즉.printStackTrace();

                     }

                     //일시 중지는 게임이 일시 중지되었는지 여부를 결정합니다.

                     if (!일시중지)

                            Moving = (moveTo(y + 1, x) && 이동);

                     //이동은 100밀리초 동안 대기하며 이동은 변경되지 않았습니다.

             }}

물론 게임에서 블록 이동의 경계 문제도 결정해야 합니다. 예를 들어 블록을 뒤집기 전에 왼쪽에는 정확히 하나의 공간 격자가 있지만 오른쪽에는 정확히 하나의 공간 격자가 있습니다. 이 경우 블록을 뒤집을 수 없으면 뒤집기는 사용자의 조작이 불편하며, 뒤집을 수 있으면 경계를 넘어 기존 블록을 차지하게 된다. 경계를 벗어나지 않고 블록을 뒤집으려면 블록을 뒤집은 후 오른쪽으로 한 칸 이동한 후 다시 블록을 그려야 합니다. 이렇게 하면 블록이 다른 고정된 블록을 밀어내지 않습니다. 범위 밖 문제를 해결합니다.

1>블록 뒤집기 판정

국경을 넘는 상황은 두 가지 상황에서 발생할 수 있는데, 하나는 블록이 떨어져서 고정된 경우이고, 두 번째는 주변 공간이 블록을 뒤집을 수 없는 경우입니다.

첫 번째 경우에는 블록이 떨어진 후에는 움직일 수 없다는 판단만 참고하면 된다.

두 번째 경우에는 각 블록을 뒤집기 전에 먼저 블록 주변의 공간을 계산하고 공간이 허용하는 경우 뒤집어야 합니다. 그렇지 않으면 뒤집을 수 없습니다.

일곱 종류의 정사각형은 불규칙하기 때문에 정사각형마다 필요한 뒤집기 공간이 다르며, 뒤집힌 상태가 달라도 필요한 뒤집기 공간도 다릅니다. 당연히 각 정사각형에 뒤집는 공간도 다르고, 블록의 종류도 다르고, 블록의 상태별로 판단 조건을 작성하는 것도 귀찮은 일이겠죠.

관찰에 따르면, 일곱 가지 모양의 블록 중 긴 블록이 가로 막대 형태로 떨어지면 떨어질 수 있는 만큼 뒤집을 수 있다는 것을 찾는 것은 어렵지 않습니다. 수직 막대를 사용하면 뒤집힌 후의 위치에 있게 됩니다. 뒤집기 전에 해당 위치에 4x1 그리드 공간이 있어야 합니다. 천자형 사각형은 계속해서 떨어질 수 있는 한 반드시 뒤집을 수 있고, 천자형 사각형은 떨어지지 않는 한 항상 뒤집을 수 있습니다. 나머지 5개의 블록 모양에는 한 가지 공통점이 있는데, 모두 수평으로 3개의 그리드 공간과 수직으로 2개의 공간을 차지하는 2개의 뒤집힌 상태를 가지고 있고, 나머지 2개의 뒤집힌 상태는 수평으로 2개의 그리드 공간을 차지하여 3개의 그리드 공간을 점유한다는 것입니다. 가로 방향으로 3칸을 점유한 상태로 떨어지면 떨어질 수 있는 한 뒤집을 수 있고, 가로 방향으로 2칸을 차지한 상태로 떨어지면 뒤집을 수 있다. 뒤집은 후 주변에는 3x2 그리드 공간이 있어야 합니다.

따라서 블록 뒤집기 판정은 세 가지 상황으로 나누어야 하는데, 첫 번째 상황은 블록이 넘어진 후 뒤집힐 수 없는 상황, 두 번째 상황은 수직 상태로 등장하는 긴 블록이 뒤집힌 경우, 세 번째 상황은 다음과 같다. 긴 띠와 들판 모양의 사각형 외에 가로 방향으로 2개의 그리드를 점유한 상태로 나타나는 나머지 5개의 사각형도 뒤집기 판정을 받습니다.

이제 어떤 상황에서 블록이 뒤집힐 수 있는지에 대한 문제가 해결되었으니 다음으로 블록이 뒤집힌 후의 위치 문제를 해결해야 합니다. 왜냐하면 블록이 뒤집힌 후의 위치를 ​​미리 알아야만 하기 때문입니다. 해당 위치의 공간 범위를 결정할 수 있습니까? 블록을 수용할 수 있는지 확인하십시오.

확실한 것은 블록이 어떻게 뒤집혀도 여전히 블록 배열에 있다는 것입니다. 즉, 블록은 게임 맵의 특정 4x4 그리드 공간 내에 있어야 합니다.

게임의 메인 인터페이스에서 블록 배열의 좌표가 결정됩니다. 불확실한 것은 뒤집은 후 블록 배열에서 블록이 어디에 있을 것인가입니다. 이 문제를 해결하기 위해 우리는 블록의 저장 원리를 다음과 같이 제한할 수 있습니다. 이렇게 하면 어떻게 뒤집어도 항상 블록 배열의 첫 번째 행과 열에 블록이 있게 됩니다. 이에 따라 블록 배열에서 블록의 위치도 결정되며, 블록을 뒤집은 후 게임 지도에 블록이 어떻게 나타나는지 알 수도 있습니다.

블록 배열의 가로, 세로 좌표를 x, y라고 가정하면, 이 위치는 긴 블록이 뒤집힌 행이 게임 맵의 y번째 행이고, 그것이 차지하는 열은 x번째에서 x+3번째 행이 됩니다. columns , 긴 스트립과 뒤집은 후의 필드 모양을 제외한 5가지 유형의 사각형이 차지하는 행은 게임 맵의 y번째 및 y+1번째 행이고, 그들이 차지하는 열은 x번째부터 x+2번째 열입니다.

따라서 위 공간에 빈 셀이 있으면 블록을 뒤집을 수 있습니다.

2>범위 수정을 벗어난 뒤집기

블록을 뒤집은 후 충분한 공간이 있으면 블록을 뒤집을 수 있지만, 블록을 뒤집은 후 공간이 충분하지 않은데 반대쪽에 충분한 공간이 있으면 어떻게 될까요?

블록이 경계에 있는 경우 뒤집힌 후 맵에서 떨어질 수 있을 뿐만 아니라 배열이 경계를 벗어날 수도 있습니다. 물론 배열이 경계를 벗어나는 것을 방지하려면 맵 배열을 더 크게 정의하기만 하면 됩니다. 범위를 벗어난 블록의 경우 반대편에 있는 경우 공간이 충분할 경우 해당 블록을 적절한 단위로 다른 방향으로 이동시켜 블록 범위를 벗어난 오류를 수정해야 합니다. 그림 5-12의 블록 뒤집기 흐름도에서 볼 수 있듯이 블록을 뒤집기 위해서는 블록이 바닥으로 떨어졌는지, 뒤집은 후 충분한 공간이 있는지, 뒤집은 후 경계를 넘었는지 여부의 세 가지 결정이 필요합니다.

그림 5-12 블록 플립 처리 흐름도

플레이어는 키보드를 조작하여 블록을 이동하고 회전시키며, 코드에서는 ControlKeyListener 클래스를 도입하고 KeyAdapter 클래스를 상속하여 키보드 모니터링 기능을 구현합니다. KeyAdapter 클래스는 Object 클래스를 상속하고 키보드 이벤트를 수신하는 데 사용되는 추상 어댑터 클래스인 KeyListener 인터페이스를 구현합니다. 이 클래스의 메서드는 비어 있습니다. 이 클래스는 리스너 객체 생성을 용이하게 하기 위해 존재합니다. KeyEvent 리스너를 생성하고 ControlKeyListener 클래스인 필수 이벤트의 메서드를 재정의하려면 이 클래스를 확장합니다. ControlKeyListener를 사용하여 리스너 객체를 생성한 다음 구성 요소의 addKeyListener 메서드를 사용하여 리스너 객체를 구성 요소에 등록합니다. 키를 누르거나 놓거나 입력하면 리스너 객체의 해당 메서드가 호출되고 KeyEvent가 적절한 메서드에 전달됩니다. 구현 코드는 다음과 같습니다.

       privateclass ControlKeyListener는 KeyAdapter를 확장합니다.

       {

              publicvoid keyPressed(KeyEvent ke)

              {

                     if (!game.isPlaying())

                            반품;

                     BlockOperation blockope = game.getCurBlock();

                     스위치(ke.getKeyCode())

                     {

                            케이스 KeyEvent.VK_DOWN:

                                   blockope.moveDown();

                                   부서지다;

                            케이스 KeyEvent.VK_LEFT:

                                   blockope.moveLeft();

                                   부서지다;

                            케이스 KeyEvent.VK_RIGHT:

                                   blockope.moveRight();

                                   부서지다;

                            케이스 KeyEvent.VK_UP:

                                   blockope.turnNext();

                                   부서지다;

                            기본:

                                   부서지다;}}}

5.3  제어판 모듈

5.3.1  메뉴바 모듈 디자인

     메뉴 표시줄에는 "게임"과 "도움말"이라는 네 가지 메뉴 옵션이 있습니다. "게임" 옵션은 "시작", "초보자", "중급", "고급", "사용자 정의", "블록 색상" 및 "종료"의 7가지 옵션으로 구분됩니다. "도움말" 옵션에는 게임 버전과 같은 정보를 표시하는 데 사용되는 "정보" 옵션이 있습니다.

    1>"시작" 버튼 기능은 재설정 기능과 유사하게 게임 캔버스를 다시 그리는 것입니다. 이 버튼의 모니터링 구현 코드는 다음과 같습니다.

       /**

        * 캔버스 재설정

        */

       공개 무효 재설정() {

              for (int i = 0; i < box.length; i++) {

                     for (int j = 0; j < 상자[i].length; j++)

                            상자[i][j].setColor(false);

              }

              다시 칠하기();

       }

    2>"초급", "중급" 및 "고급" 버튼은 게임 레벨을 수동으로 조정하여 게임 레벨 난이도를 변경하는 데 사용됩니다. "종료" 버튼은 언제든지 게임을 종료하고 게임을 종료하도록 제어합니다.

3>"도움말" 버튼에서 "정보" 버튼을 클릭하면 게임 소프트웨어 자체에 관련된 정보가 표시됩니다. 구체적인 정보는 그림과 같습니다.

                       그림 4-19 "정보" 옵션의 스크린샷

5.3.2  제어판 버튼 디자인

게임 제어판에는 점수 통계 및 레벨 통계와 같은 필드가 포함되어 있습니다.

TextField 컨트롤은 게임 자체의 통계에 의해 제공되며 플레이어는 이를 개인적으로 편집할 수 없습니다. 이 게임의 게임 룰은 한 줄을 제거할 때마다 10점을 얻고, 추가로 100점을 추가할 때마다 1레벨씩 증가하며, 초기 점수는 0점, 초기 레벨은 1점입니다.

점수, 레벨 업데이트 등의 기능을 구현하기 위한 주요 코드는 다음과 같습니다.

              /**

               * 라인이 가득 찼는지 확인하고, 라인이 가득 차면 제거 메소드를 호출합니다.

               */

              개인 무효 isFullLine() {

                     // TODO 자동 생성된 메서드 스텁

                     for (int i = 0; i < 20; i++) {

                            int 행 = 0;

                            부울 플래그 = true;

                            for (int j = 0; j < 12; j++) {

                                   if (!gc.getBox(i, j).isColorBox()) {

                                          플래그 = 거짓;

                                          부서지다;

                                   }

                            }

                            if (플래그 == true) {

                                   행 = 나;

                                   gc.delete(row);//행 삭제

                                   if(isMusic==true)

                                   {mp.playEraseSound();}

                                   addScor();//점수 추가

                                   if(scor%100==0)//1레벨을 높이려면 100점으로 설정하세요.

                                   upspeed=true;//속도 플래그를 true로 늘립니다.

                                   if(업스피드==true)

                                          업레벨();

                            }

                     }

              }

              /**

               * 점수 계산 방법

               */

              개인 무효 addScor() {

                     점수=점수+10;

                     jt9.setText("점수: "+MyFrame.scor);

              }

       }

       개인 무효 재설정() {

              점수=0;

              순위=0;

              jt10.setText("레벨:"+순위);

              jt9.setText("점수: "+점수);

              속도=거짓;

              재생=참;

              실행 중지=false;

              gc.setGameOver(false);

              gc.repaint();

              gc.reset();

       }

제어판의 버튼 기능은 4.3.1에 코딩되어 있으므로 여기서는 다시 설명하지 않습니다.

6번의 시스템 테스트 실행

6.1 테스트 개요

시스템 테스팅은 다양한 정보 시스템의 조립 테스트 및 확인 테스트를 위해 소프트웨어, 컴퓨터 하드웨어, 주변 장비, 네트워크 및 기타 요소를 함께 확인하는 것입니다. 시스템 테스트는 시스템이 요구 사항을 충족하는지 확인하기 위한 목적으로 전체 제품 시스템을 테스트하는 것입니다. 사양 요구사항 사양과의 불일치 또는 모순을 정의하고 식별하여 보다 포괄적인 솔루션을 제안합니다. 시스템 테스트를 통해 문제가 발견되면 오류의 원인과 위치를 찾아 수정해 보세요. 이는 블랙박스 테스트를 기반으로 한 전체 시스템 요구 사항이며 시스템의 모든 구성 요소를 포괄해야 합니다. 개체에는 테스트할 소프트웨어뿐만 아니라 소프트웨어가 의존하는 하드웨어, 주변 장치 및 일부 데이터, 일부 지원 소프트웨어 및 해당 인터페이스도 포함됩니다.

시스템 테스트는 컴퓨터 시스템의 일부로서 시스템의 다른 부분과 결합하여 컴퓨터 시스템의 실제 운영 환경에서 일련의 엄격하고 효과적인 테스트를 수행하여 소프트웨어의 잠재적인 문제를 식별하고 보장하는 통합 테스트 소프트웨어입니다. 시스템의 정상적인 작동.

시스템 테스트의 목적은 최종 소프트웨어 시스템이 사용자 요구 사항을 충족하는지 확인하는 것입니다.

주요 내용은 다음과 같습니다.

(1) 기능 테스트. 즉, 테스트 소프트웨어 시스템의 기능은 " 제품 요구 사항 사양" 과 같은 문서의 요구 사항에 따라 정확합니다 . 정확성은 소프트웨어의 가장 중요한 품질 요소이므로 기능 테스트가 중요합니다.

(2) 견고성 테스트. 즉, 비정상적인 조건에서 소프트웨어 시스템의 정상적인 작동을 테스트하는 능력입니다. 견고성에는 두 가지 의미가 있습니다. 하나는 내결함성이고 다른 하나는 복원력입니다.

6.1.1  테스트 원칙

 소프트웨어 테스팅의 기본 원칙에는 제품 사용자 관점에서 종합적으로 테스팅하고, 시스템 사용 과정에서 문제점과 허점을 최대한 발견하고, 연구 분석하여, 제품의 결함 부분에 대한 문제점과 개선 제안을 제안하는 것이 포함된다. 자세한 테스트 원리는 다음과 같습니다.

(1) 소프트웨어 테스트 계획은 소프트웨어 테스팅을 위한 실행 지침으로, 실제 테스트는 신중하고 엄격하게 실행되어야 하며, 특히 테스트 방법과 테스트 목적을 결정하기 위해 테스트 계획은 타당성이 높게 엄격하게 실행되어야 합니다.

(2) 테스트 표준은 사용자의 요구에 따라 제정되며 소프트웨어 테스팅의 주요 목적은 제품의 일관성을 보장하고 제품이 고객의 요구를 충족하는지 확인하는 것입니다. 따라서 테스트 과정에서는 항상 사용자의 문제를 살펴봐야 합니다. 관점과 발견 소프트웨어 결함과 단점, 시스템의 가장 심각한 오류, 사용자 요구를 충족시키지 못하는 프로그램, 기능적 결함의 영향.

(3) 시험은 함부로 대할 수 없습니다.

특히 시스템 테스트 및 반복 테스트의 경우, 테스트 계획이 엄격하게 구현되지 않으면 부주의로 인해 새로운 BUG가 발생할 가능성이 매우 높습니다. 따라서 반복되는 테스트 단계에도 세심한 주의를 기울여야 하며, 조기 발견에는 오류가 많고, 그 중 대부분은 부주의로 인해 발견되지 않습니다.

목적:

(1) 시스템 테스트 활동이 정상적으로 수행되는지 확인합니다.

(2) 소프트웨어 제품과 시스템 요구 사항 간의 불일치 또는 모순을 확인합니다.

(3) 완전한 시스템 테스트 결함 추적 데이터베이스를 구축합니다.

(4) 관련 그룹 및 개인에게 소프트웨어 시스템 테스트 활동 및 결과가 적시에 통보되도록 보장합니다.

6.1.2  시험 방법

시스템을 종합적으로 테스트하고 시스템의 문제점과 결함을 찾아내기 위해 여러 테스트 방법을 함께 사용하여 테스트하면 시스템 설계의 장점과 단점을 보다 포괄적으로 요약할 수 있습니다. 다음 테스트 방법이 사용됩니다.

기능 테스트: 시스템의 각 기능 모듈 아래 기능 포인트를 정상적으로 사용할 수 있는지 테스트합니다.

수동 테스트: 주로 입력, 클릭 및 기타 기능을 테스트합니다.

블랙박스 테스트 : 입력 후 결과가 맞는지 확인합니다.

복구 테스트: 시스템 테스트로서 복구 테스트는 주로 소프트웨어 오류를 일으키는 다양한 조건에 중점을 두고 복구 프로세스가 정상적으로 구현될 수 있는지 확인합니다. 어떤 경우에는 시스템이 내결함성을 가져야 합니다. 또한, 시스템 장애는 지정된 시간 내에 수정되어야 하며, 그렇지 않으면 심각한 경제적 손실이 초래됩니다. 복구 테스트는 주로 시스템의 내결함성을 확인합니다. 시스템 오류가 발생하면 지정된 시간 간격 내에 오류를 수정하고 시스템을 다시 시작할 수 있습니까? 복구 테스트는 먼저 다양한 방법을 사용하여 시스템을 강제로 중단시킨 다음 가능한 한 빨리 시스템을 복구할 수 있는지 확인해야 합니다. 자동 복구의 경우 재초기화, 체크포인트 메커니즘, 데이터 복구 및 재시작의 정확성을 검증해야 하며, 수동 개입 복구 시스템의 경우 평균 복구 시간을 추정하여 허용 가능한 범위 내에 있는지 확인해야 합니다.

보안 테스트: 보안 테스트는 불법 침입을 방지하기 위해 시스템 내의 보호 메커니즘을 확인하는 데 사용됩니다. 보안 테스트에서 테스터는 시스템 침입을 시도하는 역할을 하며, 방어선을 돌파하기 위해 다양한 방법을 사용합니다. 따라서 시스템 보안 설계의 표준은 시스템 침입 비용을 더 높이는 방법을 찾는 것입니다. 보안 테스트는 불법 침입을 방지하는 시스템의 능력을 확인합니다. 보안 테스트 과정에서 테스터들은 불법 침입자로 가장해 방어선을 돌파하기 위해 다양한 수단을 동원했다. 예를 들어, ① 비밀번호를 가로채거나 해독하기 위해 모든 수단을 시도합니다. ② 시스템의 보호 메커니즘을 파괴하기 위해 특별히 소프트웨어를 사용자 정의합니다. ③ 고의로 시스템 장애를 일으키고 시스템이 복구되는 동안 불법적으로 입력을 시도합니다. ④ 필요한 정보를 추론하려고 합니다. 기밀이 아닌 데이터 등을 검색하여 이론적으로 충분한 시간과 자원이 주어지면 액세스할 수 없는 시스템은 없습니다. 따라서 시스템 보안 설계의 원칙은 불법 침입으로 인한 비용이 보호되는 정보의 가치를 초과하도록 하는 것입니다. 이 시점에서 불법 침입자에게는 이익이 없습니다.

스트레스 테스트: 스트레스 테스트는 정상적인 리소스에서 비정상적인 트래픽, 빈도 또는 데이터 볼륨을 사용하여 시스템을 구현하는 것을 말합니다. 압력 테스트 중에 다음 테스트를 수행할 수 있습니다.

① 평균 인터럽트 수가 초당 1~2개라면 특수 테스트 케이스는 초당 10개의 인터럽트를 생성하도록 설계됐다.

② 입력 기능이 어떻게 반응하는지 확인하기 위해 입력 데이터의 양을 한 단계씩 늘립니다.

③ 가상 운영체제에서는 최대 메모리나 기타 자원을 요구하는 테스트 케이스가 필요하거나 과도한 디스크 저장 데이터가 발생한다.

정상적인 상황에서는 시스템을 반복적으로 테스트해야 하며 시스템 시간과 기능의 한계로 인해 시스템이 완벽할 수 없습니다. 따라서 다양한 테스트 방법을 함께 검토할 필요가 있다.

강도 테스트

강도 테스트는 비정상적인 조건에 대한 프로그램의 저항을 확인합니다. 스트레스 테스트는 항상 시스템이 비정상적인 리소스 구성에서 실행되도록 합니다. 예를 들어, ① 일반적인 인터럽트 빈도가 초당 1~2개인 경우 초당 10개의 인터럽트를 생성하는 테스트 케이스를 실행하고, ② 입력 하위 기능의 응답성을 확인하기 위해 데이터 입력 속도를 정량적으로 증가시키고, ③ 최대 동작에 필요한 저장공간(또는 기타 리소스) ④ 가상 메모리 운영체제의 충돌이나 디스크 데이터의 급격한 지터링 등을 유발할 수 있는 테스트 케이스를 실행합니다.

성능 시험

    이러한 실시간 및 임베디드 시스템의 경우 소프트웨어 부분이 기능 요구 사항을 충족하더라도 성능 요구 사항을 충족하지 못할 수 있습니다. 단위 테스트부터 시작하더라도 모든 테스트 단계에는 성능 테스트가 포함됩니다. 리드 테스터는 다음과 같이 믿습니다. 시스템이 완전히 통합된 후에야 실제 환경의 성능 요구 사항을 충족할 수 없습니다. 시스템 성능 테스트는 운영 성능을 포괄적이고 안정적으로 테스트하기 위해 이 작업을 수행하도록 설계되었습니다. 성능 테스트는 때때로 강도 테스트와 결합되며 종종 다른 소프트웨어 및 하드웨어의 지원이 필요합니다.

6.1.3  시험의 중요성과 주의사항

    소프트웨어 테스팅은 소프트웨어 설계 프로세스에서 매우 중요한 링크이며 소프트웨어 품질을 보장하는 중요한 보증입니다. 테스트 방법의 품질은 소프트웨어의 품질에 직접적인 영향을 미치며, 소프트웨어 테스트를 통해 오류와 결함을 식별하고 이를 개선함으로써 효율적이고 안정적인 시스템을 얻을 수 있습니다.

    소프트웨어는 오류를 찾을 수 있도록 다양한 각도에서 테스트하고 분석해야 합니다. 테스트할 때는 디자인 시스템이나 분석가와 관련이 없는 사람을 찾는 것이 가장 좋습니다. 왜냐하면 개발자는 소프트웨어를 개발할 때 자신만의 사고방식을 형성하고 테스트할 때 항상 이 사고방식에 얽매이기 때문에 오류를 찾기 어렵고 설계와 관련이 없는 사람이나 분석가가 쉽게 찾을 수 있기 때문입니다. 발생했습니다.

프로그램 디버깅 과정에서는 인내심과 주의가 필요하며, 약간의 오류라도 전체 기능을 구현할 수 없게 되고 이를 수정하는 데 많은 시간이 낭비됩니다. 다음 측면에 주의를 기울여야 합니다.

    1> 문법 오류

    구문 오류는 자주 발생하는 오류입니다. 예를 들어, 철자가 틀린 명령이나 잘못된 매개변수가 함수에 전달되면 오류가 발생합니다. 구문 오류로 인해 코드를 계속 작성하지 못할 수 있습니다.

    2> 논리 오류

    논리 오류는 잠재되어 있어 감지하기 어려운 경우가 많습니다. 입력 오류나 프로그램 논리 흐름으로 인한 논리 오류가 있는 경우에는 성공적으로 실행되지만 결과가 잘못된 경우가 있습니다. 예를 들어, 미만 기호를 사용해야 할 때 값을 비교하는 대신 보다 큼 기호를 사용하면 잘못된 결과가 반환됩니다.

    3> 런타임 오류

    런타임 오류는 명령어가 실행 중에 불가능한 작업을 수행하려고 하여 발생하며, 소프트웨어 동작의 신뢰성을 보장하기 위해서는 런타임 오류를 수정해야 합니다.

    이 게임의 개발 과정에서 소프트웨어 품질을 보장하기 위해 다양한 효과적인 조치를 사용하여 테스트했으며 게임의 경계 회전, 블록 뒤집기 및 국경 간 테스트를 테스트하여 소프트웨어 품질과 오류율을 크게 보장했습니다. 그러나 시스템상에는 여전히 오류나 결함이 있을 수 있으므로, 게임은 반복적인 실행 테스트를 거쳐 버그를 최대한 최소화해야 합니다.

6.2 게임 코드 및 알고리즘 테스트

    1> get() 메소드 작성시 return 값이 필요한데, 프로그램에 return 문이 없어 프로그램 컴파일 시 오류가 발생한다. 해결 방법은 메서드에 return 문을 추가하고 해당 콘텐츠를 반환하는 것입니다.

    2> 블록을 생성하기 위해 무작위 함수를 사용할 때 매개변수가 각 블록에 전달되지 않으며 컴파일을 통과할 수 없습니다. 해결책은 각 블록의 구성에 따라 해당 매개변수를 전달하는 것입니다.

    3> T자형 정사각형의 각 정사각형의 기본 위치를 작성할 때, 정사각형의 위치를 ​​제어하는 ​​변수 i를 0으로 초기화한다. 연산 결과 T자형 정사각형은 기본적으로 수직형 정사각형이 된다. 해결책은 변수 i의 초기화 값을 1로 변경하여 설계된 효과를 얻는 것입니다.

    4> 프로그램을 실행할 때 통계 점수는 각 행이 제거된 후의 점수일 뿐이며 이전 점수는 덮어쓰여 누적되지 않습니다. 해결책은 프로그램의 "score="를 "score+="로 변경하여 점수가 누적될 수 있도록 하는 것입니다.

    5> 알고리즘 과정에서 발생하는 오류는 주로 블록을 감지하고 제거하는 방법, 레벨 클리어 후 점수 누적을 처리하는 방법, 업그레이드 여부에 초점이 맞춰져 있으며, 이러한 부분은 학급 친구들과 참고 자료와 논의를 거쳐 최종적으로 해결되었습니다.

6.3 게임 인터페이스 메뉴 옵션의 기능 테스트

1> “게임” 메뉴 테스트

표 6.1 게임 메뉴 테스트 케이스

테스트 케이스 번호

테스트 프로젝트 이름

테스트 실행 단계

산출

시험 결과

01

"시작" 버튼 테스트

"게임" → "시작"을 클릭하세요.

게임 재설정

성공

02

"게임 종료" 버튼 테스트

"게임" → "게임 종료"를 클릭하세요.

게임 끝

성공

03

"기본" 버튼 테스트

"게임" → "기본"을 클릭하세요.

게임 레벨이 초보자로 선택되었습니다.

성공

04

"중급" 버튼 테스트

"게임" → "중급"을 클릭하세요.

게임레벨이 중급으로 선택되었습니다

성공

05

"고급" 버튼 테스트

"게임" → "고급"을 클릭하세요.

게임 레벨이 고급으로 선택되었습니다.

성공

06

"사용자 정의" 버튼 테스트

"사용자 정의" 버튼 테스트

사용자 정의 정보를 변경하기 위한 대화 상자가 나타납니다.

성공

07

"낙하 속도" 슬라이더 테스트

"게임" → "사용자 정의" → "낙하 속도"를 클릭하세요.

슬라이더를 끌어 블록의 낙하 속도를 변경하세요.

성공

08

"블록 모양" 라디오 버튼 테스트

"게임" → "사용자 정의" → "블록 모양" 라디오 버튼을 클릭하세요.

초급, 중급, 고급 중 블록 모양을 선택해 블록 모양을 변경할 수 있습니다.

성공

09

"상자가 자동으로 올라갈지 여부" 선택 상자 테스트

"게임" → "사용자 지정" → "블록이 자동으로 올라갈지 여부" 선택 상자를 클릭하세요.

작은 사각형을 체크할 수 있는데, 체크하면 사각형이 자동으로 올라가고, 체크하지 않으면 사각형이 자동으로 올라가지 않습니다.

성공

10

"게임 중 소리 재생 여부" 선택 상자 테스트

"게임" → "사용자 지정" → "게임 중 소리 재생 여부" 선택 상자를 클릭하세요.

작은 박스를 체크하시면 체크되어 있으면 게임 중 소리가 나고, 체크하지 않으면 게임 중에 소리가 나지 않습니다.

성공

11

"배경 변경" 선택 상자

"게임" → "사용자 지정" → "게임 중 소리 재생 여부" 선택 상자를 클릭하세요.

작은 사각형을 체크할 수 있으며, 선택하면 게임 배경 이미지가 변경되며, 체크를 해제하면 게임 배경 이미지가 변경되지 않습니다.

성공

12

확인 및 취소 버튼 테스트

"게임" → "사용자 지정" → "확인" 또는 "취소" 버튼을 클릭하세요.

변경된 설정을 저장하고 대화 상자를 종료하려면 확인을 클릭하고, 설정을 변경하지 않고 대화 상자를 종료하려면 취소를 클릭합니다.

성공

13

"블록 색상" 버튼 테스트

"게임" → "블록 색상"을 클릭하세요.

대화 상자가 나타나고 블록 색상, HSB, RGB 및 기타 사용자 정의 정보를 변경할 수 있습니다.

성공

14

"종료" 버튼 테스트

 "게임" → "종료"를 클릭하세요.

게임을 종료하고 기본 인터페이스 창을 닫습니다.

성공

2> "도움말" 메뉴 테스트

표 6.2 "도움말" 메뉴 테스트 사례

테스트 케이스 번호

테스트 프로젝트 이름

테스트 실행 단계

산출

시험 결과

15

"정보" 버튼 테스트

"도움말" → "정보"를 클릭하세요.

게임 버전 및 기타 정보를 묻는 대화 상자가 나타납니다.

성공

6.4 주요 이벤트의 기능 테스트

표 6.3 주요 이벤트 기능 테스트 케이스

테스트 케이스 번호

테스트 프로젝트 이름

테스트 실행 단계

산출

시험 결과

16

블록 움직임 테스트

게임 도중 "왼쪽, 오른쪽, 아래쪽"을 클릭하세요.

블록은 정상적으로 움직이며 경계를 벗어나지 않습니다.

성공

17

블록 회전 테스트

게임 중 "위" 방향 키를 클릭하세요.

블록은 경계나 장애물 없이 되돌릴 수 있습니다.

성공

6.5 블록 쌓기 및 제거 기능 테스트

표 6.4 블록 쌓기 및 제거 기능 테스트 사례

테스트 케이스 번호

테스트 프로젝트 이름

테스트 실행 단계

산출

시험 결과

18

블록 스태킹 테스트

블록이 바닥으로 떨어지거나 장애물과 접촉했을 때

블록이 맨 아래에 성공적으로 쌓였습니다.

성공

19

블록 제거 테스트

전체 행이 발생하는 경우

전체 행이 모두 제거되고 블록이 하나씩 아래로 이동합니다.

성공

20

게임 오버 테스트

화면이 가득 차면

세션 창이 팝업되고 "Game Over" 메시지가 표시됩니다.

성공

6.6  테스트 결과

시스템의 다양한 측면과 기능을 테스트하기 위한 여러 테스트 방법을 거친 후 테스트 결과는 시스템이 기본적으로 전체 설계 요구 사항을 충족하고 예상되는 기능이 기본적으로 완료되었음을 보여줍니다. 시스템은 기본적으로 설계 및 개발 초기에 요구 사항을 충족할 수 있으며 테스트가 완료됩니다.다만, 전체적인 기능이 강력하지 않고, 혁신성이 다소 떨어지며, 첫 번째 개발 버전인 만큼 기능, 인터페이스 디자인 등 여러 측면에서 아직 더 개선이 필요한 부분이다.

결론적으로

졸업 프로젝트를 하기 전에는 Java 관련 개발이 이론적 지식 수준에 불과했는데, 이번 졸업 프로젝트를 통해 '종이에서 배우는 것은 결국 얄팍하지만 알면 실천해야 한다'는 원칙을 이해하게 되었습니다. " 실제 소프트웨어 개발 경험이 부족하다는 것이 제가 스스로 내린 결론입니다. 이번 졸업 프로젝트를 통해 테트리스 게임의 개발과제를 모두 완료하게 되었습니다. 블록 그리기 및 변형, 스레드 생성 문제, 동기화 제어, 전체 행 판단, 제거 행 처리, 최고 점수 기록 기능 구현 등 전체 개발 과정에서 많은 문제에 직면했지만 결국 해결했습니다. 하나씩. , 더 중요한 사항 중 일부를 다음과 같이 요약합니다.

첫째, 테트리스 관련 기능과 디자인을 익히기 위해 주요 게임 다운로드 사이트에서 테트리스 게임의 독립형 버전을 자주 다운로드하고, 기능 구현과 인터페이스 디자인을 연구하고 고민하고 상담합니다. 데이터를 분석하고 점진적으로 디자인하기 위해 수정과 논쟁을 거듭한 끝에 게임 전체의 개발이 완료되었습니다.

둘째, 게임 디자인 과정에서는 거친 것부터 미세한 것까지 디자인 패턴을 채택하고 작은 것부터 큰 것까지 테스트하는 원칙을 채택합니다. 먼저 게임 프레임워크를 설계하고 계층별로 테스트한 다음 특정 구현 코드를 추가하고 점차적으로 더 자세한 테스트를 수행합니다. 디자인 과정에서 종종 문제가 발생하는데, 반복적인 생각과 테스트를 통해 나의 실수를 찾아내고 수정한 후 다음 단계로 진행하여 문제가 없는지 확인하고 최종 디버깅 작업량을 줄이기 위해 최선을 다하겠습니다.

셋째, 졸업디자인 산업은 끊임없이 새로운 것을 배우는 과정으로 볼 수 있는데, 처음에는 디자인을 이해하지 못하는 것부터 결국 성공적으로 완성하기까지 실무에서 지속적인 학습의 중요성을 깨닫고, 이것이 나에게 중요한 것이다. 미래에 직업을 얻으십시오. 교육적 중요성. 졸업 프로젝트를 통해 저는 Java 과정에 대해 더 깊이 이해하게 되었고, 이는 향후 취업을 위한 확실한 기반도 마련했습니다.

졸업 프로젝트는 학생으로서의 학습 단계의 마지막 단계로, 기초지식과 전문지식을 종합적으로 적용하는 종합적인 재학습과 개선의 과정입니다. 디자인 수준은 대학 교육의 종합 수준을 반영하므로 학교에서는 졸업 디자인을 매우 중시하고 졸업 디자인 작업 및 동원 교육에 대한 지도를 강화합니다. 대학 공부 과정에서 졸업 프로젝트는 우리의 실제 업무에 대한 사회적 참여의 중요한 부분이며, 또한 삶의 문제를 학습하고 해결하는 능력을 위한 것이며 학교 생활과 사회 생활의 변화입니다. 졸업 프로젝트를 마친 후 연구 설계와 실무를 통합하려고 노력했습니다. 이는 우리의 능력을 강화하는 데 더 도움이 됩니다.

한동안의 노력 끝에 몇몇 반 친구들과 선생님들의 도움으로 저는 마침내 중요한 과제인 졸업 프로젝트를 완료했습니다. 우리의 디자인 과정을 되돌아보면 어려움과 쉬움이 공존한다고 할 수 있습니다. 그중에서도 대학에서 배운 지식을 접목시키는 것은 사실 나에게 있어서 큰 도전이자, 대학 지식을 시험하는 시험이기도 하다. 

졸업 프로젝트를 진행하면서 우리는 많은 어려움을 겪었고, 그 중 대부분은 이전에 겪어보지 못한 문제들이었습니다. 문제 찾기, 문제를 해결하려면 이것이 가장 실용적입니다. 스스로 해결하기 어려운 문제에 직면하면 교사와 학생의 도움을 받아 정보를 얻으면서 이러한 문제를 해결할 수 있으므로 졸업 프로젝트가 성공적으로 완료됩니다. 이 프로젝트에 대한 지식은 여전히 ​​매우 심오하므로 현재뿐만 아니라 미래에도 계속해서 탐구해야 합니다.

이론과 실습의 결합에는 교실 참여에 대한 지식뿐만 아니라 학생들이 사회적으로 관련된 것들을 이해하고 접촉하는 방법에 대한 기술 훈련과 지도의 결합도 포함됩니다. 학생들의 졸업 프로젝트는 전문적인 이론 지식의 지도 하에 다양한 방식으로 실제적인 문제를 해결할 수 있습니다. 디자인 과정에서 학생들은 이론적 지식을 실습에 활용하여 전문적인 이론 지식에 대한 이해를 심화할 뿐만 아니라 이 책에 있는 이론 지식을 풍부하고 발전시켜 더 높은 수준의 경험과 기술로 전환할 수 있습니다. 기존 교육 모델로 인해 이론적 지식과 기술, 생산 실습 사이에 심각한 분리가 존재하며 학생들은 교실 밖에서 지식을 배울 수 없으며 실제 생산 문제는 종종 학습과 관련이 없으며 효과적으로 적용할 수 없습니다. 합리적인 주제 선택을 통해 학생들은 지식과 기술 시스템을 의식적으로 사용하여 분석하고 사고하며 이론적 지식과 실천의 유기적 통합에 기여하도록 지도합니다.

사회는 끊임없이 변화하고 있으며 현재 사회는 변화하고 발전하고 있으며 인재에 대한 요구 사항은 점점 더 높아지고 있습니다.관점을 사용하여 문제를 바라보고 혁신하는 방법을 배우고 사회 발전 요구 사항에 적응하는 방법을 배우십시오. 학교 밖에서 사회에 진출하여 오늘의 기회를 포착하고 미래를 창조하십시오. 선생님의 영향력과 교수님의 지식 덕분에 나는 많은 진리를 이해하고 혁신적인 정신으로 미래의 도전에 직면할 수 있었습니다. 

    요컨대, 이번 졸업 프로젝트를 통해 저는 이전보다 전문적인 지식에 더 익숙해졌을 뿐만 아니라 실무 능력도 발휘하게 되었고, 많은 것을 얻은 느낌이 들었습니다. 동시에, 이 일을 하는 동안 열심히 일했기 때문에 작은 성취감도 갖게 될 것입니다. 앞으로의 실제 업무에서도 우리는 최고를 추구하지 않고 더 나은 것을 추구하면서 열심히 노력해야 합니다! 또한, 이번 졸업 프로젝트 과정에서 도움을 주신 선생님들과 반 친구들에게도 진심으로 감사의 말씀을 전하고 싶습니다!

이 프로그램은 기본적으로 기술적으로나 기능적으로 사용자의 요구를 충족합니다. 하지만 초기 디자인으로 인해 기능이 완벽하지 못하고 디자인 디테일이 아직 미흡합니다.

这次的毕业设计,我受益匪浅,让我的思维方式更加缜密,能多个角度的看待、处理问题;知道遇到问题该如何去分析问题、解决问题。相信这些都会让我在以后的工作中受益无穷的。

参考文献

[1] 李刚,疯狂Java讲义(第3版),北京:电子工业大学出版社,2014.7

[2] 明日科技,Java从入门到精通(第4版),北京:清华大学出版社,2016(2017.1重印)

[3] 荣钦科技 Java2游戏设计.清华大学出版社,2004.

[4] 高凌琴 陈青华.俄罗斯方块游戏关键技术探讨[J].信息技术与信息化讨,2008年第二期

[5] 艾克尔.Java编程思想[M].北京:机械工业出版社,2005.2

[6] (美) Paul Hyde.Java线程编程[M].北京:人们邮电出版社,2003

[7] Martin dejode.Symbian OS J2ME[M].北京:人民邮电出版社,2005.10

[8] 朱福喜. Java程序设计技巧与开发实例[M].北京:人民邮电出版社,2004.2

[9] 袁海燕 王文涛.Java实用程序设计100例[M].北京:人民邮电出版社,2005.2:51~96

[10] 黄复贤.俄罗斯方块游戏的敏捷设计与开发[J]. 电脑编程技巧与维护,2005.4

[11] (美)Bill Venners.深入Java虚拟机[M].北京:机械工业出版社,2003.9.63~98

[12] 闻怡洋.J2ME MIDP 1.0/2.0无线设备编程指南[M].北京:北京大学出版社,2004.5:393~420

[13]赵东跃.俄罗斯方块编程[J].电脑编程技巧与维护,1998年第六期

[14]殷兆麟.Java网络编程基础[M].北京:北方交通大学出版社,2004

[15] (美)John Zukowski.Java 2 从入门到精通[M].北京:电子工业出版社,1999

[16] 宋波.Java应用开发教程[M].北京:电子工业出版社,2002

[17] 托普雷.J2ME技术手册[M].北京:中国电力出版社,2004.6:259~312

附录A 外文原文

The psychology of Tetris

   Shapes fall from the sky, all you have to do is to control how they fall and fit within each other. A simple premise, but add an annoyingly addictive electronica soundtrack (based on a Russian folk tune called Korobeiniki, apparently) and you have a revolution in entertainment.

   Since Tetris was launched on the world in the 1980s, millions of hours have been lost through playing this simple game. Since then, we’ve seen games consoles grow in power, and with it the appearance of everything from Call of Duty to World of Warcraft. Yet block and puzzle games like Tetris still have a special place in our hearts. Why are they are so compelling?

   The writer Jeffrey Goldsmith was so obsessed with Tetris that he wrote a famous article asking if the game’s creator Alexey Pajitnov had invented “a pharmatronic?” – a video game with the potency of an addictive drug. Some people say that after playing the game for hours they see falling blocks in their dreams or buildings move together in the street – a phenomenon known as the Tetris Effect. Such is its mental pull, there’s even been the suggestion that the game might be able to prevent flashbacks in people with PTSD.

   I had my own Tetris phase, when I was a teenager, and spent more hours than I should have trying to align the falling blocks in rows. Recently, I started thinking about why games like Tetris are so compelling. My conclusion? It’s to do with a deep-seated psychological drive to tidy up.

   Many human games are basically ritualised tidying up. Snooker, or pool if you are non-British, is a good example. The first person makes a mess (the break) and then the players take turns in potting the balls into the pockets, in a vary particular order. Tetris adds a computer-powered engine to this basic scenario – not only must the player tidy up, but the computer keeps throwing extra blocks from the sky to add to the mess. It looks like a perfect example of a pointless exercise – a game that doesn't teach us anything useful, has no wider social or physical purpose, but which weirdly keeps us interested.

   There's a textbook psychological phenomenon called theZeigarnik Effect, named after Russian psychologist Bluma Zeigarnik. In the 1930s, Zeigarnik was in a busy cafe and heard that the waiters had fantastic memories for orders – but only up until the orders had been delivered. They could remember the requests of a party of 12, but once the food and drink had hit the table they forgot about it instantly, and were unable to recall what had been so solid moments before. Zeigarnik gave her name to the whole class of problems where incomplete tasks stick in memory.

   The Zeigarnik Effect is also part of the reason why quiz shows are so compelling. You might not care about the year the British Broadcasting Corporation was founded or the percentage of the world's countries that have at least one McDonald's restaurant, but once someone has asked the question it becomes strangely irritating not to know the answer (1927 and 61%, by the way). The questions stick in the mind, unfinished until it is completed by the answer.

Game theory

   Tetris holds our attention by continually creating unfinished tasks. Each action in the game allows us to solve part of the puzzle, filling up a row or rows completely so that they disappear, but is also just as likely to create new, unfinished work. A chain of these partial-solutions and newly triggered unsolved tasks can easily stretch to hours, each moment full of the same kind of satisfaction as scratching an itch.

   The other reason why Tetris works so well is that each unfinished task only appears at the same time as its potential solution – those blocks continuously fall from the sky, each one a problem and a potential solution. Tetris is a simple visual world, and solutions can immediately be tried out using the five control keys (move left, move right, rotate left, rotate right and drop – of course). Studies of Tetris players show that people prefer to rotate the blocks to see if they'll fit, rather than think about if they'll fit. Either method would work, of course, but Tetris creates a world where action is quicker than thought – and this is part of the key to why it is so absorbing. Unlike so much of life, Tetris makes an immediate connection between our insight into how we might solve a problem and the means to begin acting on it.

   The Zeigarnik Effect describes a phenomenon, but it doesn't really give any reason for why it happens. This is a common trick of psychologists, to pretend they solved a riddle of the human mind by giving it a name, when all they've done is invented an agreed upon name for the mystery rather than solved it. A plausible explanation for the existence of the Effect is that the mind is designed to reorganise around the pursuit of goals. If those goals are met, then the mind turns to something else.

   Trivia takes advantage of this goal orientation by frustrating us until it is satisfied. Tetris goes one step further, and creates a continual chain of frustration and satisfaction of goals. Like a clever parasite, Tetris takes advantage of the mind's basic pleasure in getting things done and uses it against us. We can go along with this, enjoying the short-term thrills in tidying up those blocks, even while a wiser, more reflective, part of us knows that the game is basically purposeless. But then all good games are, right?

   If you would like to comment on this article or anything else you have seen on Future, head over to our Facebook page or message us on Twitter.

附录B 外文翻译

俄罗斯方块的心理效应

这一人们喜闻乐见的游戏成功的秘诀在于抓住了我们重复排列与使用的心理乐趣。

几何图形从屏幕上方缓缓降落,你要做的就是控制其降落方式并与其他图形排列消除。游戏的初衷很简单,但加上了令人上瘾的背景电子音乐后(据说来自俄罗斯民谣Korobeiniki)人们的娱乐生活发生了翻天覆地的变化。

自从1986年俄罗斯方块问世后,这一简单的游戏耗去了玩家数百万个小时。从那时起,从使命召唤到魔兽世界,游戏操纵平台的外观和性能都在茁壮发展。但像俄罗斯方块这样的方块益智类游戏始终占据了我们心中的一席之地。为何它们如此经久不衰呢?

作家杰弗里·戈德史密斯是沉迷于俄罗斯方块不能自拔,乃至于他写了一篇著名的文章,文中提到俄罗斯方块的发明者阿里克谢·帕吉诺特夫是否发明了一种“瘾药”——让人可以玩出瘾。一些人说自己连玩了几小时俄罗斯方块后连梦里都会出现降落的方块,还有看街上的大楼都在移动——这是一种名为“俄罗斯效应”的现象。这是游戏产生的心理推动作用,还有建议称那些患有创伤后精神紧张性障碍的人们需要预防游戏产生的幻觉重现。

当我十几岁的时候也有过一段俄罗斯方块沉迷期,我花了很多时间在方块的排列组合上。最近,我开始反思为什么俄罗斯方块这类游戏能够长青。说说我的结论吧,植根人们心中的心理驱使作用是整理这些方块的关键。

很多游戏的宗旨大体都是整理消除。落袋台球(snooker)就是典型的例子(对于非英国人来说叫做pool)。第一个人把球打乱后,其他人依照不同规则轮流将球射入落袋里。俄罗斯方块在这一基本框架中加入了电脑控制的成分——不光是玩家要整理方块,电脑还会不断从上方扔下额外的方块来制造凌乱。游戏看起来就是整一个漫无目的的过程,完全没有寓教于乐的成分在内,也没有深远的社交或是心理意义,但是我们却意外地为此着迷。

러시아 심리학자 브루마 자가르닉(Bruma Zegarnik)의 이름을 딴 '자이가르닉 효과(Zaigarnik Effect)'라는 대표적인 심리 현상이 있다. 1830년대에 Zeigarnik은 바쁜 카페에서 웨이터들이 놀라운 추억을 갖고 있다는 사실을 발견했습니다. 하지만 식사가 배달될 때까지만 그랬습니다. 그들은 12인 테이블에서 무엇을 주문했는지 기억할 수 있지만 일단 음식과 음료가 제공되면 모든 것을 잊어버리고 이전의 견고한 기억을 기억하지 못합니다. Zeigarnik은 자신의 이름을 따서 기억 속에 끝나지 않은 작업이 지속되는 현상을 명명했습니다.

자이가르닉 효과(Zeigarnik Effect)는 지능 쇼가 인기를 끄는 이유 중 하나입니다. BBC가 몇 년에 창설됐는지, 세계에서 맥도널드가 하나 이상 있는 나라가 몇 개국인지는 관심이 없을 수도 있지만, 이런 질문이 나오면 답을 모르면 불편함을 느낄 것이다(그런데, 대답은 1927년이고 61%입니다). 질문은 답이 나올 때까지 마음속에 남아 있습니다.

게임 원리

테트리스는 끊임없이 작업을 생성하여 우리의 신경을 사로잡고 있습니다. 게임의 각 링크는 우리가 미스터리를 풀도록 유도하며, 기둥을 일렬로 세우거나 완성한 후 그래픽은 사라지지만 끊임없이 새로운 그래픽이 나타나며 순환이 다시 시작됩니다. 부분적으로 해결되고 새로 형성된 작업 체인은 시간을 보내기에 매우 편리하며 반복되는 만족감과 불안감이 매 순간 채워집니다.

테트리스가 인기를 끄는 또 다른 이유는 완료해야 할 작업이 잠재적인 솔루션과 병치되어 있기 때문입니다. 점차적으로 등장하는 각 블록에는 고유한 배치 방식이 있습니다. 테트리스는 5개의 버튼(왼쪽, 오른쪽, 왼쪽 회전, 오른쪽 회전, 착륙)을 조작하여 신속하게 해결책을 찾을 수 있는 단순한 시각적 세계입니다. 테트리스 플레이어에 대한 연구에 따르면 사람들은 일반적으로 블록이 떨어지는 것을 보면서 그것에 대해 생각하기보다는 블록이 일치하는지 확인하기 위해 블록을 회전하는 것을 선호합니다. 물론 두 가지 방법 모두 가능하지만 테트리스의 세계에서는 항상 액션이 먼저이고 이것이 매력의 핵심입니다. 테트리스는 실제 생활과 달리 문제를 다룰 때 우리가 보고 생각하는 것을 직접적으로 연결해 문제에 대한 즉각적인 조치를 취할 수 있다.

자이가르닉 효과는 현상에 대한 설명이지만 그 원인과 결과를 설명할 수는 없습니다. 이는 심리학자들이 흔히 사용하는 수법인데, 인간의 이름을 붙여서 인간의 신비를 풀어낸 것 같지만, 사실 그들은 탐욕스럽게 자기 이름을 붙일 뿐 문제를 전혀 해결하지 못했습니다. 이러한 현실에 대한 합리적인 설명은 목표를 달성하는 과정에서 뇌 회로가 재구성된다는 것입니다. 이 목표가 달성되면 생각은 다른 것으로 옮겨갈 것입니다.

퍼즐 게임은 심리적 성취의 원리를 이용하여 우리가 만족할 때까지 계속해서 우리를 좌절시킵니다. 테트리스는 실패와 성공 사이에 연속적인 사슬을 만들어 한 단계 더 나아갑니다. 영리한 기생충처럼 테트리스는 게임을 완성하고 재사용하는 과정에서 사람들의 심리적 즐거움을 이용합니다. 우리가 놀면서, 우리 성격의 이성적이고 성숙한 부분은 이것이 기본적으로 무의미한 게임이라는 것을 이해하지만, 블록을 배열하는 재미를 잠시 즐깁니다. 하지만 재미있는 게임은 다 그렇지 않나요?

참고자료:

Java 기반 테트리스 게임 시스템 졸업 프로젝트 (프로젝트 보고서 + 방어 PPT + 소스 코드 + 데이터베이스 + 스크린샷 + 배포 영상) icon-default.png?t=N5K3https://download.csdn.net/download/dwf1354046363/87813602

배포 동영상을 포함한 174개의 Java 졸업 프로젝트 사례_Yi Xiaoxia의 블로그-CSDN 블로그 다양한 Java 졸업 프로젝트가 자체 선택되었으며 설명 동영상과 컬렉션이 포함된 160개 이상의 Java 졸업 프로젝트 세트가 있습니다 https://cv2022.blog.csdn .net/article/details/124463185?spm=1001.2014.3001.5502

추천

출처blog.csdn.net/woaimx_1314/article/details/130789752