<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=TheJavaMan%2F%EC%A7%80%EB%A2%B0%EC%B0%BE%EA%B8%B0</id>
	<title>TheJavaMan/지뢰찾기 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=TheJavaMan%2F%EC%A7%80%EB%A2%B0%EC%B0%BE%EA%B8%B0"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=TheJavaMan/%EC%A7%80%EB%A2%B0%EC%B0%BE%EA%B8%B0&amp;action=history"/>
	<updated>2026-05-14T17:32:37Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=TheJavaMan/%EC%A7%80%EB%A2%B0%EC%B0%BE%EA%B8%B0&amp;diff=39636&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:28, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=TheJavaMan/%EC%A7%80%EB%A2%B0%EC%B0%BE%EA%B8%B0&amp;diff=39636&amp;oldid=prev"/>
		<updated>2021-02-07T05:28:12Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;뭔가 어설프긴 하지만 완성은 했다 ㅋㅋㅋ&lt;br /&gt;
&lt;br /&gt;
그래픽적으로 더 신경을 쓰고 싶지만&lt;br /&gt;
&lt;br /&gt;
귀찮아서 안하구 있다&lt;br /&gt;
&lt;br /&gt;
애플릿은 크기가 동적으로 변하지 않는 것 같다&lt;br /&gt;
&lt;br /&gt;
난이도에 따라 크기가 변해야 되는데&lt;br /&gt;
&lt;br /&gt;
어떻게 해결할지 고민중이다&lt;br /&gt;
&lt;br /&gt;
[http://zeropage.org/~darkduck/mine.html 실행]&lt;br /&gt;
&lt;br /&gt;
 import java.awt.*;&lt;br /&gt;
 import java.awt.event.*;&lt;br /&gt;
 import java.util.*;&lt;br /&gt;
 &lt;br /&gt;
 import javax.swing.*;&lt;br /&gt;
 &lt;br /&gt;
 public class Mine extends JApplet {&lt;br /&gt;
 	private int row, col, numMines;&lt;br /&gt;
 	private Vector mines = new Vector();&lt;br /&gt;
 	//private Point firstClick = new Point();&lt;br /&gt;
 	private int map[][];&lt;br /&gt;
 	private int numClick;	// 왼쪽 버튼 누른 수&lt;br /&gt;
 							// numClick + numMines == row * col =&amp;amp;gt; 겜종료&lt;br /&gt;
 	private int numFlags;	// 깃발 꼿은 수&lt;br /&gt;
 							// numMines - numFlags = 남은 폭탄 수&lt;br /&gt;
 	private boolean gameOver = false;&lt;br /&gt;
 &lt;br /&gt;
 	Timer t = new Timer();&lt;br /&gt;
 &lt;br /&gt;
 	JPanel&lt;br /&gt;
 	top = new JPanel(),&lt;br /&gt;
 	center = new JPanel();&lt;br /&gt;
 	JTextField&lt;br /&gt;
 	numLeftMines = new JTextField(3),&lt;br /&gt;
 	useTime = new JTextField(6);&lt;br /&gt;
 	JButton action = new JButton(&amp;quot;^ _ ^&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 	private Kan kan[][];&lt;br /&gt;
 &lt;br /&gt;
 	public void init() {&lt;br /&gt;
 		Container cp = getContentPane();&lt;br /&gt;
 &lt;br /&gt;
 		action.addActionListener(new ActionListener() {&lt;br /&gt;
 			public void actionPerformed(ActionEvent e) {&lt;br /&gt;
 				mines.clear();&lt;br /&gt;
 				setMapSize(row, col, numMines);&lt;br /&gt;
 				setMines();&lt;br /&gt;
 				setFigures();&lt;br /&gt;
 				center.removeAll();&lt;br /&gt;
 				setKans();&lt;br /&gt;
 				gameOver = false;&lt;br /&gt;
 				action.setText(&amp;quot;^ _ ^&amp;quot;);&lt;br /&gt;
 				numLeftMines.setText(String.valueOf(numMines));&lt;br /&gt;
 				useTime.setText(&amp;quot;0&amp;quot;);&lt;br /&gt;
 				center.validate();&lt;br /&gt;
 				t.reset();&lt;br /&gt;
 			}&lt;br /&gt;
 		});&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 		top.add(numLeftMines, BorderLayout.WEST);&lt;br /&gt;
 		top.add(action, BorderLayout.CENTER);&lt;br /&gt;
 		top.add(useTime, BorderLayout.EAST);&lt;br /&gt;
 &lt;br /&gt;
 		cp.add(top, BorderLayout.NORTH);&lt;br /&gt;
 &lt;br /&gt;
 		setMapSize(9, 9, 10);&lt;br /&gt;
 		setMines();&lt;br /&gt;
 		setFigures();&lt;br /&gt;
 		setKans();&lt;br /&gt;
 		numLeftMines.setText(String.valueOf(numMines));&lt;br /&gt;
 		useTime.setText(&amp;quot;0&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 		center.setLayout(new GridLayout(row, col));&lt;br /&gt;
 		cp.add(center);&lt;br /&gt;
 		//cp.setSize(20 * col, 20 * row);&lt;br /&gt;
 		t.start();&lt;br /&gt;
 &lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	public void setMapSize(int r, int c, int nm) {&lt;br /&gt;
 		row = r;&lt;br /&gt;
 		col = c;&lt;br /&gt;
 		numMines = nm;&lt;br /&gt;
 		map = new int[row][col];&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	public void setMines() {&lt;br /&gt;
 		Random rand = new Random();&lt;br /&gt;
 		int r, c;&lt;br /&gt;
 		boolean samePos;&lt;br /&gt;
 		int i = 0;&lt;br /&gt;
 		while (i &amp;amp;lt; numMines) {&lt;br /&gt;
 			r = Math.abs(rand.nextInt()) % row;&lt;br /&gt;
 			c = Math.abs(rand.nextInt()) % col;&lt;br /&gt;
 			samePos = false;&lt;br /&gt;
 			for (int j = 0; j &amp;amp;lt; mines.size(); j++)&lt;br /&gt;
 				if ((((Point)mines.get(j)).y == r &amp;amp;amp;&amp;amp;amp; ((Point)mines.get(j)).x == c)/* ||&lt;br /&gt;
 						(firstClick.y == r &amp;amp;amp;&amp;amp;amp; firstClick.x == c)*/) {&lt;br /&gt;
 					samePos = true;&lt;br /&gt;
 					break;&lt;br /&gt;
 				}&lt;br /&gt;
 			if (samePos == true)&lt;br /&gt;
 				continue;&lt;br /&gt;
 			mines.add(new Point(c, r));&lt;br /&gt;
 			i++;&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	public void setFigures() {&lt;br /&gt;
 		int figure;&lt;br /&gt;
 &lt;br /&gt;
 		for (int i = 0; i &amp;amp;lt; numMines; i++)&lt;br /&gt;
 			map[((Point)mines.get(i)).y][((Point)mines.get(i)).x] = -1;&lt;br /&gt;
 		for (int i = 0; i &amp;amp;lt; row; i++)&lt;br /&gt;
 			for (int j = 0; j &amp;amp;lt; col; j++) {&lt;br /&gt;
 				if (map[i][j] == -1)&lt;br /&gt;
 					continue;&lt;br /&gt;
 				figure = 0;&lt;br /&gt;
 &lt;br /&gt;
 				if (j &amp;amp;gt; 0 &amp;amp;amp;&amp;amp;amp; map[i][j - 1] == -1)&lt;br /&gt;
 						figure++;&lt;br /&gt;
 &lt;br /&gt;
 				if (j &amp;amp;lt; col - 1 &amp;amp;amp;&amp;amp;amp; map[i][j + 1] == -1)&lt;br /&gt;
 						figure++;&lt;br /&gt;
 &lt;br /&gt;
 				if (i &amp;amp;gt; 0) {&lt;br /&gt;
 					if (map[i - 1][j] == -1)&lt;br /&gt;
 						figure++;&lt;br /&gt;
 					if (j &amp;amp;gt; 0 &amp;amp;amp;&amp;amp;amp; map[i - 1][j - 1] == -1)&lt;br /&gt;
 						figure++;&lt;br /&gt;
 					if (j &amp;amp;lt; col - 1 &amp;amp;amp;&amp;amp;amp; map[i - 1][j + 1] == -1)&lt;br /&gt;
 						figure++;&lt;br /&gt;
 				}&lt;br /&gt;
 				if (i &amp;amp;lt; row - 1) {&lt;br /&gt;
 					if (map[i + 1][j] == -1)&lt;br /&gt;
 						figure++;&lt;br /&gt;
 					if (j &amp;amp;gt; 0 &amp;amp;amp;&amp;amp;amp; map[i + 1][j - 1] == -1)&lt;br /&gt;
 						figure++;&lt;br /&gt;
 					if (j &amp;amp;lt; col - 1 &amp;amp;amp;&amp;amp;amp; map[i + 1][j + 1] == -1)&lt;br /&gt;
 						figure++;&lt;br /&gt;
 				}&lt;br /&gt;
 				map[i][j] = figure;&lt;br /&gt;
 			}&lt;br /&gt;
 		numFlags = 0;&lt;br /&gt;
 		numClick = 0;&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	public void setKans() {&lt;br /&gt;
 		kan = new Kan[row][col];&lt;br /&gt;
 		for (int i = 0; i &amp;amp;lt; row; i++)&lt;br /&gt;
 			for (int j = 0; j &amp;amp;lt; col; j++) {&lt;br /&gt;
 				kan[i][j] = new Kan(map[i][j], j, i);&lt;br /&gt;
 				kan[i][j].setBorder(BorderFactory.createRaisedBevelBorder());&lt;br /&gt;
 				center.add(kan[i][j]);&lt;br /&gt;
 			}&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 	class Kan extends JLabel {&lt;br /&gt;
 		private boolean state = false;	// false 숨겨진 상태&lt;br /&gt;
 										// true 드러난 상태&lt;br /&gt;
 		private int numAroundMines;		// 0~8&lt;br /&gt;
 										// -1 폭탄&lt;br /&gt;
 		private int x, y;&lt;br /&gt;
 		public Kan(int nam, int x, int y) {&lt;br /&gt;
 			numAroundMines = nam;&lt;br /&gt;
 			setHorizontalAlignment(JLabel.CENTER);&lt;br /&gt;
 			this.x = x;&lt;br /&gt;
 			this.y = y;&lt;br /&gt;
 &lt;br /&gt;
 			addMouseListener(new MouseListener() {&lt;br /&gt;
 				public void mouseClicked(MouseEvent e) {&lt;br /&gt;
 					if (!gameOver &amp;amp;amp;&amp;amp;amp; e.getButton() == MouseEvent.BUTTON1 &amp;amp;amp;&amp;amp;amp; !getText().equals(&amp;quot;X&amp;quot;))&lt;br /&gt;
 						clicked();&lt;br /&gt;
 				}&lt;br /&gt;
 &lt;br /&gt;
 				public void mouseEntered(MouseEvent e) {&lt;br /&gt;
 &lt;br /&gt;
 				}&lt;br /&gt;
 &lt;br /&gt;
 				public void mouseExited(MouseEvent e) {&lt;br /&gt;
 &lt;br /&gt;
 				}&lt;br /&gt;
 &lt;br /&gt;
 				public void mousePressed(MouseEvent e) {&lt;br /&gt;
 					if (!gameOver &amp;amp;amp;&amp;amp;amp; e.getButton() == MouseEvent.BUTTON3 &amp;amp;amp;&amp;amp;amp; state == false) {&lt;br /&gt;
 						if (getText().equals(&amp;quot;X&amp;quot;)) {&lt;br /&gt;
 							setText(&amp;quot;?&amp;quot;);&lt;br /&gt;
 							numFlags--;&lt;br /&gt;
 							numLeftMines.setText(String.valueOf(numMines - numFlags));&lt;br /&gt;
 						}&lt;br /&gt;
 						else if (getText().equals(&amp;quot;?&amp;quot;)) {&lt;br /&gt;
 							setText(&amp;quot;&amp;quot;);&lt;br /&gt;
 						}&lt;br /&gt;
 						else if (getText().equals(&amp;quot;&amp;quot;)) {&lt;br /&gt;
 							setText(&amp;quot;X&amp;quot;);&lt;br /&gt;
 							numFlags++;&lt;br /&gt;
 							numLeftMines.setText(String.valueOf(numMines - numFlags));&lt;br /&gt;
 						}&lt;br /&gt;
 &lt;br /&gt;
 					}&lt;br /&gt;
 					if (!gameOver &amp;amp;amp;&amp;amp;amp; e.getButton() == MouseEvent.BUTTON1 &amp;amp;amp;&amp;amp;amp; state == false)&lt;br /&gt;
 						action.setText(&amp;quot;^ o ^&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 				}&lt;br /&gt;
 &lt;br /&gt;
 				public void mouseReleased(MouseEvent e) {&lt;br /&gt;
 					if (!gameOver &amp;amp;amp;&amp;amp;amp; e.getButton() == MouseEvent.BUTTON1 &amp;amp;amp;&amp;amp;amp; state == false) {&lt;br /&gt;
 						action.setText(&amp;quot;^ _ ^&amp;quot;);&lt;br /&gt;
 					}&lt;br /&gt;
 				}&lt;br /&gt;
 			});&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
 		public void clicked() {&lt;br /&gt;
 			if (state == false) {&lt;br /&gt;
 				state = true;&lt;br /&gt;
 &lt;br /&gt;
 				numClick++;&lt;br /&gt;
 				setBorder(BorderFactory.createLoweredBevelBorder());&lt;br /&gt;
 &lt;br /&gt;
 				if (numAroundMines == -1) {&lt;br /&gt;
 					setText(&amp;quot;O&amp;quot;);&lt;br /&gt;
 					boom();&lt;br /&gt;
 					return;&lt;br /&gt;
 &lt;br /&gt;
 				} else if (numAroundMines == 0) {&lt;br /&gt;
 					setText(&amp;quot;&amp;quot;);&lt;br /&gt;
 					if (x &amp;amp;gt; 0 &amp;amp;amp;&amp;amp;amp; map[y][x - 1] != -1)&lt;br /&gt;
 						kan[y][x - 1].clicked();&lt;br /&gt;
 &lt;br /&gt;
 					if (x &amp;amp;lt; col - 1 &amp;amp;amp;&amp;amp;amp; map[y][x + 1] != -1)&lt;br /&gt;
 						kan[y][x + 1].clicked();&lt;br /&gt;
 &lt;br /&gt;
 					if (y &amp;amp;gt; 0) {&lt;br /&gt;
 						if (map[y - 1][x] != -1)&lt;br /&gt;
 							kan[y - 1][x].clicked();&lt;br /&gt;
 						if (x &amp;amp;gt; 0 &amp;amp;amp;&amp;amp;amp; map[y - 1][x - 1] != -1)&lt;br /&gt;
 							kan[y - 1][x - 1].clicked();&lt;br /&gt;
 						if (x &amp;amp;lt; col - 1 &amp;amp;amp;&amp;amp;amp; map[y - 1][x + 1] != -1)&lt;br /&gt;
 							kan[y - 1][x + 1].clicked();&lt;br /&gt;
 					}&lt;br /&gt;
 &lt;br /&gt;
 					if (y &amp;amp;lt; row - 1) {&lt;br /&gt;
 						if (map[y + 1][x] != -1)&lt;br /&gt;
 							kan[y + 1][x].clicked();&lt;br /&gt;
 						if (x &amp;amp;gt; 0 &amp;amp;amp;&amp;amp;amp; map[y + 1][x - 1] != -1)&lt;br /&gt;
 							kan[y + 1][x - 1].clicked();&lt;br /&gt;
 						if (x &amp;amp;lt; col - 1 &amp;amp;amp;&amp;amp;amp; map[y + 1][x + 1] != -1)&lt;br /&gt;
 							kan[y + 1][x + 1].clicked();&lt;br /&gt;
 					}&lt;br /&gt;
 &lt;br /&gt;
 				} else&lt;br /&gt;
 					setText(String.valueOf(numAroundMines));&lt;br /&gt;
 &lt;br /&gt;
 				if (row * col == numClick + numMines)&lt;br /&gt;
 					success();&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
 		public void success() {&lt;br /&gt;
 			gameOver = true;&lt;br /&gt;
 			action.setText(&amp;quot;^ . ^ V&amp;quot;);&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
 		public void boom() {&lt;br /&gt;
 			gameOver = true;&lt;br /&gt;
 			for (int i = 0; i &amp;amp;lt; row; i++)&lt;br /&gt;
 				for (int j = 0; j &amp;amp;lt; col; j++)&lt;br /&gt;
 					if (map[i][j] == -1) {&lt;br /&gt;
 						if (!kan[i][j].getText().equals(&amp;quot;X&amp;quot;)) {&lt;br /&gt;
 							kan[i][j].setText(&amp;quot;O&amp;quot;);&lt;br /&gt;
 							kan[i][j].setBorder(BorderFactory.createLoweredBevelBorder());&lt;br /&gt;
 						}&lt;br /&gt;
 					}&lt;br /&gt;
 			action.setText(&amp;quot;ㅡ . ㅡ&amp;quot;);&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	class Timer extends Thread {&lt;br /&gt;
 		int t = 0;&lt;br /&gt;
 		public Timer() {&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
 		public void run() {&lt;br /&gt;
 			while (true) {&lt;br /&gt;
 				try {&lt;br /&gt;
 					sleep(10);&lt;br /&gt;
 				} catch (InterruptedException e) {&lt;br /&gt;
 				}&lt;br /&gt;
 				if (!gameOver) {&lt;br /&gt;
 					t++;&lt;br /&gt;
 					useTime.setText(t / (100 * 60 * 60) + &amp;quot;:&amp;quot; + (t % (100 * 60 * 60)) / (100 * 60) + &amp;quot;:&amp;quot; + (t % (100 * 60)) / 100 + &amp;quot;.&amp;quot; + t % 100);&lt;br /&gt;
 				}&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
 		public void reset() {&lt;br /&gt;
 			t = 0;&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>