`
ttsecret
  • 浏览: 4053 次
  • 性别: Icon_minigender_2
  • 来自: 长沙
最近访客 更多访客>>
社区版块
存档分类
最新评论

画板和五子棋的保存

J# 
阅读更多
画板重绘、保存的总结
重绘:
最初制作的画板在窗体缩小后再打开便没有了所画的图形,要想使改变窗体后所画的东西仍然存在,就需要对画板进行重绘。

采用自定义队列对画板窗体上的画布进行保存:形状item、颜色color,即每画一个图形,就将该图形加入到队列GraphNList中。

在给形状按钮添加动作监听器时,需要使用  按钮名.setActioncommand("sth");  命令,相当于给按钮添加一个使监听器识别的名字sth,然后在 e.getActionCommand();  得到名字与已有的名字对比,若匹配则执行相应的命令。

保存:
画板的保存采用的是DataStream流,从GraphNList中取得图形信息,通过画布对象graph得到图形的形状Graph g = nj.getindex(i);,通过读取与写入int来实现。
队列的大小
图形的坐标
图形的形状
颜色:分RGB三个颜色值读取与写入,将color类型转换为int

package cn.javanet.ttstudy2;


import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;


public class SaveDraw {
	/**
	 * 将图形信息写入文件
	 * 
	 * @param nj
	 *            :要写入的图形
	 * @throws Exception
	 */
	public void SaveFile(NList nj) {
		// 创建写入文件的Data对象
		String fileName1 = "src\\cn\\javanet\\ttstudy2\\Graph";
		try {
			FileOutputStream fout = new FileOutputStream(fileName1);
			DataOutputStream dout = new DataOutputStream(fout);
			// 写入文件的大小
			dout.writeInt(nj.size());
			// 写入文件
			for (int i = 0; i < nj.size(); i++) {
				// 创建Graph对象
				Graph g = nj.getindex(i);
				 //得到形状
				int item = 1;
				if (g.getItem().equals("curve")) {
					item = 1;
				}else if (g.getItem().equals("line")) {
					item = 2;
				}else if (g.getItem().equals("oval")) {
					item = 3;
				}else if (g.getItem().equals("rect")) {
					item = 4;
				}
				dout.writeInt(item);
				//得到颜色
				java.awt.Color color = g.getColor();
				int rgb = color.getRGB();
				dout.writeInt(rgb);
				
				int x1 = g.getX1();
				int y1 = g.getY1();
				int x2 = g.getX2();
				int y2 = g.getY2();
				// 写入文件
				// 写入坐标
				dout.writeInt(x1);
				dout.writeInt(y1);
				dout.writeInt(x2);
				dout.writeInt(y2);
				
			}
			// 强制写入
			dout.flush();
			// 关闭流
			dout.close();
			fout.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 打开文件
	 * 
	 * @return 文件中图形的存储信息
	 */
	public NList OpenDraw() {
		// 初始化队列对象
		NList nj = new GraphNList();
		// 创建写入文件的Data流对象
		String fileName1 = "src\\cn\\javanet\\ttstudy2\\Graph";
		try {
			FileInputStream fin = new FileInputStream(fileName1);
			DataInputStream din = new DataInputStream(fin);
			// 读取的文件大小
			int size = din.readInt();
			// 循环读取文件
			for (int i = 0; i < size; i++) {
				int item = din.readInt();
				// 读取颜色
				int rgb = din.readInt();
				// 坐标
				int x1 = din.readInt();
				int y1 = din.readInt();
				int x2 = din.readInt();
				int y2 = din.readInt();
				
				String str = "";
				if (item == 1) {
					str = "curve";
				}else if (item == 2) {
					str = "line";
				}else if (item == 3) {
					str = "oval";
				}else if (item == 4) {
					str = "rect";
				}
				
				// 实例化graph对象
				Graph g = new Graph(new java.awt.Color(rgb), str, x1, y1, x2,
						y2);
				nj.add(g);
			}
			// 关闭
			din.close();
			fin.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return nj;
	}
}



五子棋的重绘、保存
重绘:
设定判断条件,让棋子只能在棋盘的相交处下
定义一个数组,默认为0,在对应的位置存入1或2,分别对应黑子和白子

保存:
仍然采用DataStream流读写文件
由于棋盘始终没有变化,每次重绘方法调用时都会对棋盘进行重绘,只需将所下棋子的信息写入文件,打开时通过重绘方法将棋子重绘即可。
将数组中的信息写入文件(没有棋子的位子要用0占位!)
//在对应的位子写入棋子
for(int i = 0;i<cp.Row;i++){
	for(int j = 0;j<cp.Clo;j++){
							dout.writeInt(array[i][j]);
	}
}


//按顺序读取对应位子的棋子
for(int i = 0;i<cp.Row;i++){
    for(int j=0;j<cp.Clo;j++){
       array[i][j] = din.readInt();
						 
	 }
}
				  
分享到:
评论

相关推荐

    自制画板打开和保存BMP格式文件

    总的来说,自制画板打开和保存BMP格式文件涉及到的知识点包括:BMP文件格式的理解与解析,二进制文件操作,图像处理基础,GUI编程,以及事件驱动编程。这个项目既能够加深对图像文件格式的理解,也能锻炼实际编程...

    JAVA画板中的保存程序

    在Java编程环境中,我们可以利用内置的图形用户界面(GUI)组件和类来创建一个画板应用,让用户进行绘图操作。...通过掌握这些知识点,开发者可以构建出功能强大的画图工具,满足用户保存和分享自己作品的需求。

    画板BMP格式保存和打开总结

    标题中的“画板BMP格式保存和打开总结”是指在编程中处理图像文件时,针对BMP(Bitmap)格式的图像进行保存和读取的操作。BMP是一种无损的位图格式,通常用于Windows操作系统中,它直接存储像素数据,没有经过任何...

    易语言取画板图片文件源码.zip

    综上所述,这个压缩包提供的源码为我们提供了一个易语言中处理画板图片并保存的实例,对于学习易语言的图像处理和文件操作功能非常有帮助。通过深入研究和实践,你将能够掌握易语言在图形用户界面开发中的核心技能。

    基于jqury和canvas画板技术五子棋游戏设计与实现(论文+源码)-kaic.docx

    网络五子棋游戏如今面临着一些新的挑战和机遇。一方面,网络游戏需要考虑到网络延迟和带宽等因素,保证游戏的实时性和稳定性。另一方面,网络游戏需要考虑到游戏的可玩性和趣味性,以吸引更多的玩家参与。本文基于...

    java画板程序支持文件打开,保存。

    java画板程序 源代码,自己写的作业,给大家共享一下了,^_^。代码共享,随意修改了。...支持文件的打开和保存操作,默认的文件格式为jdf,压缩包中firstDraw.jdf为我画的第一幅画,可以用来打开测试。。

    画板保存总结

    4. **源码分析**:博客中的链接可能提供了具体的代码实现,通过阅读源码,读者可以学习到如何将图形界面与事件处理结合,以及如何有效地保存和加载图形数据。这包括类的设计、对象的实例化、方法的调用等方面的知识...

    画板保存

    【标题】:“画板保存”通常指的是在计算机图形软件中,用户可以绘制、编辑并保存他们的创作内容到本地或云端的功能。这个功能涉及到图形用户界面(GUI)的设计、图像处理和文件格式支持等多个方面。 【描述】:...

    火山安卓高级画板实现画板开发源码.rar

    火山安卓高级画板实现画板开发源码

    一个基于vue3+typescript的画板源码.zip

    这个"一个基于vue3+typescript的画板源码.zip"项目,显然是一个使用Vue3和TypeScript实现的交互式画板应用。画板是一种常见的前端功能,通常用于绘图、标注、设计等领域,它允许用户在网页上进行自由绘画和编辑。 1...

    几何画板绿色版无毒完整

    学生和教师可以保存自己的工作进度,并制作成演示文稿,这样不仅便于教学过程中使用,也有助于学生在课外时间复习和消化课堂上所学知识。自定义工具与记录演示功能的结合,极大地提升了学习的互动性和趣味性。 对于...

    完整的安卓画板源代码 Android小画板

    最后,为了提高用户体验,源代码可能还包含了一些性能优化措施,例如使用`SurfaceView`来实现流畅的绘图,或者使用异步任务处理大图的加载和保存,防止阻塞主线程。 总的来说,这个【完整的安卓画板源代码】涵盖了...

    网络画板和聊天

    【网络画板和聊天】是基于Java技术开发的一款集在线画图与实时聊天功能于一体的软件。这个项目展示了Java在网络通信和图形用户界面设计上的强大能力,同时也为用户提供了一个创新的协作平台。 首先,我们要理解...

    模拟画板(模拟windows画板)

    此外,为了提高用户体验,可以添加保存和加载功能,允许用户保存他们的作品为图片文件,并在需要时重新加载。这需要用到Bitmap类,它可以将PictureBox的内容保存为图像文件,同时也能加载图像到PictureBox中。 总的...

    画板.zip画板简单的例子

    标题中的“画板.zip画板简单的例子”表明这是一个关于简易画板应用的示例项目,可能包含源代码、资源文件和说明文档等。这个画板应用程序允许用户进行绘画操作,如选择不同粗细的画笔绘制线条,选择多种颜色,清空...

    玲珑画板 6.045 版安装.rar

    在文件管理方面,玲珑画板允许用户保存和打开工作文件,这意味着你可以保存你的作品以便后续查看或编辑,这对于长期的教学计划或是复杂项目的制作尤其重要。在本压缩包中,包含的“玲珑画板 6.045 版安装.exe”文件...

    Android画板开发之添加背景和保存画板内容为图片

    "Android 画板开发之添加背景和保存画板内容为图片" Android 画板开发中,添加背景和保存画板内容为图片是两个非常重要的功能,下面我们将详细介绍如何实现这两个功能。 一、绘制背景 在 Android 画板开发中,...

    基于对话框的画板MFC程序

    2. `PaintORama.clw`:这是一个类工作空间文件,用于保存Visual C++的类视图信息,包括类的组织和关联。 3. `PaintORamaDlg.cpp` 和 `PaintORama.cpp`:这两个是源代码文件,`.cpp`扩展名表明它们是C++代码。`...

    易语言画板透明去色

    在这个"易语言画板透明去色"的主题中,我们主要探讨的是如何利用易语言来实现一个功能,即在画板上进行图像处理,实现透明度调整和去色效果。 首先,我们需要了解画板的基本概念。在计算机图形学中,画板是一个可以...

Global site tag (gtag.js) - Google Analytics