C语言实现扫雷游戏详解(附源码)

目录
  • 1.游戏的功能
  • 2.游戏实现的基本思路
    • 2.1实现菜单给玩家选择
    • 2.2初始化棋盘
    • 2.3数组大小的问题
    • 2.4对棋盘赋值
    • 2.5打印棋盘
    • 2.6布置雷
    • 2.7排查雷
  • 3.代码基本实现部分
    • 3.1主函数部分
    • 3.2 初始化棋盘
    • 3.3对两个棋盘进行赋值
    • 3.4打印棋盘
    • 3.5布置雷
    • 3.6排查雷
    •  3.7函数声明
  • 4.扫雷游戏的源代码
  • 总结

1.游戏的功能

游戏的主要功能有

1:棋盘内有若干个雷

2:玩家输入要排查雷的坐标

3:在玩家输入的坐标处显示周围八个坐标有几个雷

3:若玩家将所有的雷排查完,结束游戏,玩家胜利

4:若玩家输入有雷的坐标,则玩家游戏失败

5:玩完一把玩家可继续选择进入或退出游戏

2.游戏实现的基本思路

2.1实现菜单给玩家选择

站在玩家的角度,我们肯定是要制作一个简易的菜单来供玩家选择的,包括进入游戏,退出游戏等等,这个步骤也很简单,我们通常把这个步骤放到主函数内实现。

2.2初始化棋盘

大家看上面的棋盘可别以为我只定义了一个棋盘,其实不然,我们需要用到两个棋盘。

一个棋盘专门用来存放我们布置好的雷 ,我们把这个棋盘命名为mine吧

一个棋盘专门展示出来给大家进行排雷 ,并且把排雷的信息存入这个数组,我们把这个棋盘命名为show吧

注意:这两个棋盘都要定义为字符型的二维数组,而不是整型的

这两个棋盘都要先初始化为0,在后面的过程中,大家一定要分清这两个数组哦

2.3数组大小的问题

虽然图中我们的棋盘时9*9大小的,但是我们前面对游戏的功能进行约定过,我们要在玩家输入的坐标处周围八个坐标有几个雷。如果我们定义的棋盘是9*9大小的。当我们输入的坐标是偏中间 比如 4,4  3 ,6 这些,我们可以很好地访问到这些坐标处周围的八个坐标,但如果我们要排查边边上的那些坐标,在访问边边上的周围的八个坐标时,就会造成越界访问,所以我们要定义11*11大小的坐标刚刚好,上下和左右两边都多出一行。只要我们打印的时候只打印中间的9*9部分就可以了。

2.4对棋盘赋值

这里我们要先约定好,我们是有两个棋盘的

一个是名为mine的棋盘,  我们把它数组的内容全部初始化为字符0,0表示不是雷,我们可以用1表示是雷,后面我们布置雷的时候会用到这个字符1

一个是名为show的棋盘,我们把这个数组全部内容初始化为字符*,玩家就是在这个棋盘上进行扫雷,每扫一个,*就少一个

注意:赋值的时候是整个数组的大小,是11*11的部分,而不是9*9的部分

2.5打印棋盘

将棋盘初始化好了,我们就要把棋盘打印出来,这样玩家才好进行排雷,我们是只打印中间9*9的部分,而且只打印show数组,如果把布置好雷的mine 数组打印出来了,玩家就可以看到雷了,但我们在后面布置好雷的时候可以把mine 数组打印出来观察一下,看一下有误问题

2.6布置雷

这里我们就先约定好在9*9的棋盘上布置10个雷

布置10个雷,我们就要让电脑随机生成10个坐标,然后对应的二维数组的内容赋值为字符1

产生随机值是要用到srand函数的,如果大家对这个还不了解,可以去了解一下它的用法

这里我就不细讲了

2.7排查雷

我们要让玩家输入坐标,玩家没输入一次坐标,若玩家没有被雷炸死,需要在坐标处显示坐标周围有几个雷,我们约定过布置了10个雷,所以玩家要赢的话必须排查71个坐标,若玩家输入的坐标处有雷,玩家就被炸死了,结束游戏

3.代码基本实现部分

3.1主函数部分

void menu()
{
	printf("***********************\n");
	printf("********1.play*********\n");
	printf("********0.exit*********\n");
	printf("***********************\n");
}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));    //产生随机数
    //我们将这个过程写成一个do……while循环,使玩家一进来就可以进行选择
	do
	{
		menu();        //打印菜单
		printf("请选择:\n");
		scanf_s("%d", &input);
		switch (input) //switch多分支语句
		{
		case 1:
			printf("扫雷\n");
			game();   //进入游戏
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}

	} while (input);
}

3.2 初始化棋盘

棋盘的大小是11*11的,但我们后面有时只用到9*9的部分,所以我们只要分别定义两个行和列的大小,我们可以使用宏定义,方便以后修改

#define ROW 9        //定义行和列的大小
#define COL 9

#define ROWS ROW+2
#define COLS COL+2
//定义两个字符型的二维数组,并初始化为0
char mine[ROWS][COL] = { 0 };  //存放布置好雷的信息
char show[ROWS][COLS] = { 0 }; //存放排查出来的雷的信息

3.3对两个棋盘进行赋值

	char mine[ROWS][COL] = { 0 };  //存放布置好雷的信息
	char show[ROWS][COLS] = { 0 }; //存放排查出来的雷的信息

	//初始化数组
	//第一个数组初始化为'0',第二个数组初始化为'*'
	initboard(mine, ROWS, COLS, '0');   //因为整个数组都要进行初始化,所以传ROWS和COLS
	initboard(show, ROWS, COLS, '*');
void initboard(char board[ROWS][COLS], int rows, int cols, char set)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < rows; i++)
	{
		for (j = 0; j < cols; j++)
		{
			board[i][j] = set;
		}
	}
}

3.4打印棋盘

//将这段代码放到game函数内执行
void displayboard(char board[ROWS][COLS], int row, int col)
{
    //为了让玩家方便输入坐标,所以我们把棋盘的行和列打印出来
	int i = 0;
	int j = 0;
	printf("-----扫雷游戏-----\n");
	for (i = 0; i <= col; i++)  //打印行号
	{
		printf("%d ", i);
	}
	printf("\n");
	for (i = 1; i <= row; i++)
	{
		printf("%d ", i);//打印列号
		for (j = 1; j <= col; j++)
		{
			printf("%c ", board[i][j]);
		}
		printf("\n");
	}
	printf("-----扫雷游戏-----\n");
}

3.5布置雷

我们要在mine数组内布置10个雷

//布置雷
void setmine(char mine[ROWS][COLS], int row, int col)
                                   //因为要把雷布置在9*9格子内,所以接受的参数是ROW和COL
{
	int count = 10;  //布置10个雷
	while (count)                   //当已经布置了10个雷,退出循环
	{
        //产生的坐标应该在1-9的坐标范围内
		int x = rand() % row + 1;    //任何正整数模上9再加上1结果就是1-9
		int y = rand() % col + 1;
		if (mine[x][y] == '0')       //如果棋盘棋盘上内容是'0',也就是说还没有布置雷的话
		{                            //才将'1'赋值给数组,否则重新生成坐标
			mine[x][y] = '1';
			count--;                 //没生成一个坐标,count--
		}
	}
}

3.6排查雷

int get_mine_count(char mine[ROWS][COLS], int x, int y)   //注意返回类型为int
{
	//遍历周围八个坐标
	return mine[x - 1][y] +
		mine[x - 1][y - 1] +
		mine[x][y - 1] +
		mine[x + 1][y - 1] +
		mine[x + 1][y] +
		mine[x + 1][y + 1] +
		mine[x][y + 1] +
		mine[x - 1][y + 1] - 8 * '0';    //周围有8个坐标
       //这里利用的是字符的ASCII码值进行转换 字符0-9的ASCII码值分别是30-39
       //8*'0'总共就是240,减去240就是雷的个数
}
void findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
	int x = 0;
	int y = 0;
	int win = 0;       //定义一个变量,统计玩家排了多少个坐标
	while (win<row*col-10)    //当win=9*9-10的时候,代表所有雷都排完了,不需要再进入循环
	{
		//1.输入排查的坐标
		//2.检查坐标处是不是雷
		//(1)是雷 - 炸死了
		//(2)不是雷 -统计坐标周围有几个雷,存储排查雷的信息放到show数组内
		printf("请输入要排查的雷的坐标\n");
		scanf_s("%d %d", &x, &y);
		//判断坐标是否合法
		if (x >= 1 && x <= col && y >= 1 && y <= col)
		{
			//不需要调整坐标
			if (mine[x][y] == '1')
			{
				printf("很遗憾,你被炸死了\n");
				displayboard(mine, ROW, COL);
				break;
			}
			else if(mine[x][y] != '1')
			{
				//不是雷的话,统计x,y坐标周围有几个雷
				int count = get_mine_count(mine, x, y);  //调用这个函数,获取雷的个数
				show[x][y] = count + '0';    //将雷的个数加上'0'就是个数对应的ASCII码值
				//显示排查出的信息
				displayboard(show, ROW, COL); //没排完一次雷,显示数组最新的排查信息
				win++;   //玩家每排一个坐标,win++一次
			}
		}
		else
		{
			printf("输入坐标不合法,请重新输入\n");  //若玩家输入坐标不合法,提示玩家重新输入
		}
	}
	if (win == 71)
	{
		printf("恭喜你排雷成功\n");
		displayboard(mine, ROW, COL);
	}

}

 3.7函数声明

最后大家不要忘了函数声明哦,我这是写在一个文件里的,大家也可以写在不同的文件里

void initboard(char board[ROWS][COLS], int rows, int cols, char set);
void displayboard(char board[ROWS][COLS], int row, int col);
void setmine(char board[ROWS][COLS], int row, int col);
void findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

get_mine_count函数是定义在void game函数内部的函数,因此get_mine_count函数不需要进行声明

4.扫雷游戏的源代码

#include<stdio.h>
#include<windows.h>  //Windows.h和time.h是随机数产生需要的头文件
#include<time.h>

#define ROW 9
#define COL 9

#define ROWS ROW+2
#define COLS COL+2

void initboard(char board[ROWS][COLS], int rows, int cols, char set);
void displayboard(char board[ROWS][COLS], int row, int col);
void setmine(char board[ROWS][COLS], int row, int col);
void findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

//打印菜单
void menu()
{
	printf("***********************\n");
	printf("********1.play*********\n");
	printf("********0.exit*********\n");
	printf("***********************\n");
}

//初始化棋盘
void initboard(char board[ROWS][COLS], int rows, int cols, char set)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < rows; i++)
	{
		for (j = 0; j < cols; j++)
		{
			board[i][j] = set;
		}
	}
}

//打印棋盘
void displayboard(char board[ROWS][COLS], int row, int col)
{
	int i = 0;
	int j = 0;
	printf("-----扫雷游戏-----\n");
	for (i = 0; i <= col; i++)  //打印行号
	{
		printf("%d ", i);
	}
	printf("\n");
	for (i = 1; i <= row; i++)
	{
		printf("%d ", i);//打印列号
		for (j = 1; j <= col; j++)
		{
			printf("%c ", board[i][j]);
		}
		printf("\n");
	}
	printf("-----扫雷游戏-----\n");
}

//布置雷
void setmine(char mine[ROWS][COLS], int row, int col)
{
	int count = 10;  //布置10个雷
	while (count)
	{
		int x = rand() % row + 1; //坐标范围是1-9
		int y = rand() % col + 1; //
		if (mine[x][y] == '0')
		{
			mine[x][y] = '1';
			count--;
		}
	}
}

int get_mine_count(char mine[ROWS][COLS], int x, int y)
{
	//遍历周围八个坐标
	return mine[x - 1][y] +
		mine[x - 1][y - 1] +
		mine[x][y - 1] +
		mine[x + 1][y - 1] +
		mine[x + 1][y] +
		mine[x + 1][y + 1] +
		mine[x][y + 1] +
		mine[x - 1][y + 1] - 8 * '0';
}

//排查雷
void findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
	int x = 0;
	int y = 0;
	int win = 0;
	while (win<row*col-10)
	{
		//1.输入排查的坐标
		//2.检查坐标处是不是雷
		//(1)是雷 - 炸死了
		//(2)不是雷 -统计坐标周围有几个雷,存储排查雷的信息放到show数组内
		printf("请输入要排查的雷的坐标\n");
		scanf_s("%d %d", &x, &y);
		//判断坐标是否合法
		if (x >= 1 && x <= col && y >= 1 && y <= col)
		{
			//不需要调整坐标
			if (mine[x][y] == '1')
			{
				printf("很遗憾,你被炸死了\n");
				displayboard(mine, ROW, COL);
				break;
			}
			else if(mine[x][y] != '1')
			{
				//不是雷的话,统计x,y坐标周围有几个雷
				int count = get_mine_count(mine, x, y);
				show[x][y] = count + '0';
				//显示排查出的信息
				displayboard(show, ROW, COL);
				win++;
			}
		}
		else
		{
			printf("输入坐标不合法,请重新输入\n");
		}
	}
	if (win == 1)
	{
		printf("恭喜你排雷成功\n");
		displayboard(mine, ROW, COL);
	}

}

void game()
{
	char mine[ROWS][COL] = { 0 };  //存放布置好雷的信息
	char show[ROWS][COLS] = { 0 }; //存放排查出来的雷的信息

	//初始化数组
	//第一个数组初始化为'0',第二个数组初始化为'*'
	initboard(mine, ROWS, COLS, '0');
	initboard(show, ROWS, COLS, '*');

	//打印数组
	  //这个在游戏中是不打印的
	displayboard(show, ROW, COL);

	//布置雷
	setmine(mine, ROW, COL);  //布置十个雷 

	//排查雷
	findmine(mine, show, ROW, COL); //在mine排查,结果放到show里 

}

int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
		menu();
		printf("请选择:\n");
		scanf_s("%d", &input);
		switch (input)
		{
		case 1:
			printf("扫雷\n");
			game();  //扫雷游戏
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}

	} while (input);
}

总结

到此这篇关于C语言实现扫雷游戏详解(附源码)的文章就介绍到这了,更多相关C语言扫雷游戏内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C语言实现扫雷游戏小项目

    本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下 一.基本实现功能 1.建立一个游戏菜单 2.创建游戏盘,一个埋雷,一个显示. 3.打印游戏盘. 4.翻开坐标如若没踩到雷显示周围一圈8个有几个雷. 5.判断胜利 翻开的格子数等于没埋雷的个数. 二.源代码展示 1.头文件  minesweep.h #pragma once #include <stdio.h> #include <Windows.h> #include <string.h> #i

  • C语言实现第一次防死版扫雷游戏

    目录 前言 一.功能描述 二.实现的步骤 1.菜单的打印函数: 2.初始化雷盘函数: 3.打印雷盘函数: 4.埋雷函数: 5.排雷函数: 6.防止第一次死的函数: 7.展开函数: 总结 前言 扫雷这款经典的游戏想必大多数人都玩过了,今天用C语言实现了扫雷小游戏,小伙伴们快来看看吧. 一.功能描述 扫雷代码有以下功能: 1.若输入的坐标周围没雷,可以直接展开 2.防止第一次玩就直接踩雷,被炸死 3.若输入的坐标周围有雷,会显示周围雷的个数 4.若排雷失败,会展示出雷图的雷分布是怎样的 二.实现的步

  • C语言扫雷详细代码分步实现流程

    目录 一,创建菜单 二,创建游戏内容 1.场景创建和初始化 2.场景打印 3.埋雷 4.排雷 完整代码 1.game.h 2.game.c 3.test.c 还是说一下:发的这些小游戏都是第一个版本,之后改进的话都会在标题中声明. 上一个游戏三子棋:             >> C语言三子棋一步步实现详程<< 来看这次扫雷游戏的思路:                  1.创建游戏界面菜单                   2.创建游戏内容:             初始化场景

  • 基于C语言实现简单的扫雷小游戏

    本文实例为大家分享了C语言实现简单的扫雷小游戏的具体代码,供大家参考,具体内容如下 首先来规划一下扫雷游戏实现的几个步骤: 初始化棋盘:二维数组的遍历及赋值 为了后续代码的简洁方便,我们用'0'来初始化 void InitBoard(char board[ROWS][COLS], int rows, int cols, char set) { int i = 0; int j = 0; for (i = 0; i < rows; i++) { for (j = 0; j < cols; j++

  • 基于C语言扫雷游戏的设计与实现

    目录 1 引言 2 相关工作 3 本文方法 4 结果与分析 5 总结 整体代码 1 引言 伴随着信息技术的快速发展,近年来,人们的生活已经离不开计算机.生活娱乐几乎都是在计算机上进行的.其中的扫雷游戏就是之一.扫雷游戏是微软公司在1992年在windows系统上发布的一款益智类小游戏,直到今天这款小游戏依然存在,可见此款游戏的成功.本文将用Visual Studio 2019作为开发工具来模拟实现扫雷游戏.经过大一第一学期的学习,我们对C语言的理论及其相关知识有了一定的认识和了解.本文可以把我们

  • c语言实现含递归清场版扫雷游戏

    目录 一,设计思路 二.实现方式 1.菜单的打印 2.game函数 3.棋盘的初始化与打印  4.雷的放置,雷的个数 5.递归实现一片效果  6.排查雷  三.完整代码 总结 一,设计思路 想必大家都玩过扫雷  这便是一个标准的扫雷,换做代码实现,我们需要考虑以下几点: 1.棋盘的设计与初始化 2.在棋盘中放入雷 3.统计雷数 4.如何实现"一片"的效果 5.输赢的判断 接下来我们进行具体操作. 二.实现方式 1.菜单的打印 对任意一个游戏,菜单是必不可少的,也是最简单的部分,直接上代

  • C语言扫雷游戏的简单实现

    今天来用c语言做一个扫雷功能的简单实现,首先创建一个test.c来用于在写代码的途中测试扫雷代码,game.h来存放实现扫雷函数需要用到的头文件,game.c来存放最终的成品. 首先用函数打印一个菜单,让玩家选择进行游玩扫雷游戏或者退出,考虑到玩家会输入1和2以外的数字,我们加上一个fefault,将菜单放入do-while循环中,while的结束条件为choose为0,玩家在结束一场游戏后可以重新走一边循环,保证用户在结束一把扫雷之后可以选择继续进行下一局或是退出游戏. void menu()

  • C语言实现递归版扫雷游戏实例

    目录 思路 清晰的逻辑 菜单 棋盘 布置雷 排雷 判断输赢 text.c实现 game.c实现 game.h实现 递归部分详解 总结 思路 清晰的逻辑 为方便将其分为三个文件:text.c(测试) game.c(函数实现) game.h(头文件声明) 在排雷的时候为了方便,我们需要将每一行每一列对应的行数,列数打印出来. #define LEI 10 #define ROW 10 #define LOW 10 #define ROWS ROW+2 #define LOWS LOW+2 //在定义

  • C语言实现简易的扫雷游戏

    本文实例为大家分享了C语言实现简易的扫雷游戏的具体代码,供大家参考,具体内容如下 在正式讲内容之前先说一说扫雷游戏的规则 游戏规则很简单,点击方格,如果是地雷,游戏失败,找到所有地雷游戏胜利 .刚开始需要碰运气,只要点开一个区域,就可以正式开始了. 3.根据现有情况,判断出一定有雷的位置. 4.进一步计算,因为"2"右边的"1"已经有从属的雷了,所以右边的"2"的正下方没有雷,因此可以判断出左边有两颗雷,满足两个"2". 5.

  • C语言实现扫雷游戏详解(附源码)

    目录 1.游戏的功能 2.游戏实现的基本思路 2.1实现菜单给玩家选择 2.2初始化棋盘 2.3数组大小的问题 2.4对棋盘赋值 2.5打印棋盘 2.6布置雷 2.7排查雷 3.代码基本实现部分 3.1主函数部分 3.2 初始化棋盘 3.3对两个棋盘进行赋值 3.4打印棋盘 3.5布置雷 3.6排查雷  3.7函数声明 4.扫雷游戏的源代码 总结 1.游戏的功能 游戏的主要功能有 1:棋盘内有若干个雷 2:玩家输入要排查雷的坐标 3:在玩家输入的坐标处显示周围八个坐标有几个雷 3:若玩家将所有的

  • C语言实现扫雷游戏详解(附源码)

    目录 1.游戏的功能 2.游戏实现的基本思路 2.1实现菜单给玩家选择 2.2初始化棋盘 2.3数组大小的问题 2.4对棋盘赋值 2.5打印棋盘 2.6布置雷 2.7排查雷 3.代码基本实现部分 3.1主函数部分 3.2 初始化棋盘 3.3对两个棋盘进行赋值 3.4打印棋盘 3.5布置雷 3.6排查雷  3.7函数声明 4.扫雷游戏的源代码 总结 1.游戏的功能 游戏的主要功能有 1:棋盘内有若干个雷 2:玩家输入要排查雷的坐标 3:在玩家输入的坐标处显示周围八个坐标有几个雷 3:若玩家将所有的

  • Oracle 错误日志表及异常处理包详解 附源码

    1 概述 1. 目的:'快速定位程序异常' 2. 包处理的核心思想:'自治事务' -- 自治事务的 "提交.回滚" 与 主事务 之间互不影响 3. 错误异常记录逻辑大体一致,此处记录,方便需要使用时复制.粘贴 4. 验证思路:通过执行报错的过程,观察 '程序执行结果' 和 '日志表' 数据插入情况 2 效果演示 程序执行截图: 日志表查询截图: 3 源码 说明: 1. 测试中,共有 2 个用户 -- 模拟实际开发场景 (1) odsdata: 存放业务数据 (2) odscde : 执

  • C语言实现扫雷游戏详解

    本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下 功能设计 扫雷大家应该都玩过,这是一个十分经典的游戏,今天我将给大家讲解如何用C语言实现扫雷,我的这个扫雷有如下几个功能: 1.显示该点周围雷的个数 2.第一次下子,不炸死 3.坐标周围没雷,可以实现展开 4.游戏结束后展示玩家用时 效果展示 话不多说,先附上效果图: 设计思路 我们只要输入坐标就可以扫雷了,是不是很有趣? 其实要想实现这也不难,我们要用几个算法模块来模拟游戏规则,需要用函数来调用各个模块使游戏跑起来.

  • Python7个爬虫小案例详解(附源码)中篇

    目录 前言 题目三: 分别使用XPath和Beautiful Soup4两种方式爬取并保存非异步加载的“豆瓣某排行榜”如https://movie.douban.com/top250的名称.描述.评分和评价人数等数据 题目四: 实现某东商城某商品评论数据的爬取(评论数据不少于100条,包括评论内容.时间和评分) 本次的7个python爬虫小案例涉及到了re正则.xpath.beautiful soup.selenium等知识点,非常适合刚入门python爬虫的小伙伴参考学习. 前言 关于Pyth

  • Python7个爬虫小案例详解(附源码)上篇

    目录 前言 题目一: 使用正则表达式和文件操作爬取并保存“百度贴吧”某帖子全部内容(该帖不少于5页) 题目二: 实现多线程爬虫爬取某小说部分章节内容并以数据库存储(不少于10个章节) 本次的7个python爬虫小案例涉及到了re正则.xpath.beautiful soup.selenium等知识点,非常适合刚入门python爬虫的小伙伴参考学习. 前言 关于Python7个爬虫小案例的文章分为三篇,本篇为上篇,共两题,其余两篇内容请关注! 题目一: 使用正则表达式和文件操作爬取并保存“百度贴吧

  • Android未读消息拖动气泡示例代码详解(附源码)

    前言 拖动清除未读消息可以说在很多应用中都很常见,也被用户广泛接受.本文是一个可以供参考的Demo,希望能有帮助. 提示:以下是本篇文章正文内容,下面案例可供参考 最终效果图及思路 实现关键: 气泡中间的两条边,分别是以ab,cd为数据点,G为控制点的贝塞尔曲线. 步骤: 绘制圆背景以及文本:连接情况绘制贝塞尔曲线:另外端点绘制一个圆 关键代码 1.定义,初始化等 状态:静止.连接.分离.消失 在onSizeChanged中初始化状态,固定气泡以及可动气泡的圆心 代码如下(示例): @Overr

  • android编程之XML文件解析方法详解(附源码)

    本文实例讲述了android编程之XML文件解析方法.分享给大家供大家参考,具体如下: 在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX.Pull.Dom解析方式.最近做了一个android版的CSDN阅读器,用到了其中的两种(sax,pull),今天对android解析xml的这三种方式进行一次总结. 今天解析的xml示例(channels.xml)如下: <?xml version="1.0" encoding="utf-8

  • Android编程实现泡泡聊天界面实例详解(附源码)

    本文实例讲述了Android编程实现泡泡聊天界面的方法.分享给大家供大家参考,具体如下: 昨天写了个界面,实现了Android泡泡聊天界面.运行结果如下,点击发送按钮,屏幕就显示Text的内容. 我也是在网上的一份源码的基础上更改的,整个泡泡界面的实现要点: (1)主界面其实就是一个List View (2)文字显示界面其实就使用了android:background="@drawable/incoming"这个东西.背景图片的格式是xxx.9.png,专门用来缩放的,不然显示效果非常

  • Android编程单元测试实例详解(附源码)

    本文实例讲述了Android编程单元测试.分享给大家供大家参考,具体如下: 完整实例代码代码点击此处本站下载. 本文是在上一篇文章<java编程之单元测试(Junit)实例分析>的基础上继续讲解android的单元测试,android源码中引入了java单元测试的框架(android源码目录:libcore\junit\src\main\java\junit\framework中可见),然后在java单元测试框架的基础上扩展属于android自己的测试框架.android具体框架类的关系图如下

随机推荐