SDK Windows编程(五子棋)

VC++实战:从零构建Win32五子棋游戏,掌握Windows桌面开发核心 Windows桌面应用开发的核心在于理解其底层运行机制与图形界面构建。从概念上讲,Windows程序遵循事件驱动的消息循环模型,通过窗口过程函数响应系统与用户交互。其原理涉及Win32 API这一原生接口,开发者需直接操作窗口创建、消息分发及图形设备接口进行绘制。掌握这些基础技术价值巨大,不仅能构建高性能的桌面应用,更是深入理解操作系统与图形编程的基石。典型的应用场景包括开发工具软件、传统桌面游戏及需要精细控制界面的应用程序。本文以经典的五子棋游戏开发为例,具体演示如何运用**Win32 API**和**G 阅读详情
写比较麻烦,不过没牵涉到什么算法,只是一些逻辑问题
#include<tchar.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>

LRESULT CALLBACK WndProc (HWND , UINT , WPARAM , LPARAM) ;

//定义主函数
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInst,LPSTR lpCmdLine,int nCmdShow){
	
	WNDCLASS wndclass ;
	HWND hWnd ;
	MSG msg ;
	char szWindowClass[] = "窗口示例" ; //窗口类名
	char szTitle[] = "My Windows" ; //窗口标题
	
	////////////////////////////////////////////
	wndclass.cbClsExtra = 0 ;//窗口类无扩展
	wndclass.cbWndExtra = 0 ;  //窗口实例无扩展
	wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH) ;//窗口背景为白色
	wndclass.hCursor = LoadCursor(NULL , IDC_ARROW) ;//窗口采用箭头光标
	wndclass.hIcon = LoadIcon(hInstance ,MAKEINTRESOURCE(IDI_APPLICATION)) ;//窗口的最小化图标为默认图标
	wndclass.hInstance = hInstance ;//当前实例句柄
	wndclass.lpfnWndProc = WndProc ;//窗口处理函数为WndProc
	
	wndclass.lpszMenuName = NULL ; //窗口中无菜单
	wndclass.lpszClassName = szWindowClass ; //窗口的类名 
	wndclass.style = CS_HREDRAW | CS_VREDRAW|CS_DBLCLKS  ; //窗口类型为默认类型
	
	//////////////////////////////////////////.
	//注册窗口类
	if(!RegisterClass(&wndclass)){
		
		MessageBox(NULL , _T("窗口类注册失败!") , _T("窗口注册") , NULL) ;
		return 1 ;
		
	}
	
	////////////////////////////////////////
	//创建窗口
	hWnd=CreateWindow(
		
		szWindowClass ,  //窗口类名
		szTitle , //窗口实例的标题名
		WS_OVERLAPPEDWINDOW , //窗口的样式 
		CW_USEDEFAULT , CW_USEDEFAULT , //窗口左上角坐标为默认 //窗口右上角坐标为默认
		700 , 700 ,  //窗口宽度为默认 //窗口高度为默认 
		
		NULL , //此窗口无父窗口
		NULL ,  //此窗口无主菜单
		hInstance,  //创建此窗口应用程序的当前句柄
		NULL  //不使用一个传递给窗口的参数值的指
		
		);
	
	if(!hWnd){
		
		MessageBox(NULL , "创建窗口失败!" ,("创建窗口") , NULL) ;
		return 1 ;
	}
	
	ShowWindow(hWnd,nCmdShow);  //显示窗口
	UpdateWindow(hWnd);  //绘制用户区
	
	
	//消息循环
	while(GetMessage(&msg,NULL,0,0)){
		
		TranslateMessage(&msg);  //将消息的虚拟键转换为字符信息
		DispatchMessage(&msg);   //将信消息发送到指定窗口函数
		
	}
	
	return(int) msg.wParam ; //程序终止时讲信息返回系统
}

HFONT CreateMyFont(){
	
	return CreateFont(
		0,//字体高度
		0,//字体宽度
		0,
		0,
		600,//字体粗细
		0,//字体倾斜 0为非倾斜
		0,//下划线 0为非
		0,//中划线 0为非
		ANSI_CHARSET,
		OUT_DEFAULT_PRECIS,
		CLIP_DEFAULT_PRECIS,
		DEFAULT_QUALITY,
		DEFAULT_PITCH,
		"楷体_GB2312"//字体名
		) ;
}

typedef struct point{
	int x ,y ;
	int color ;
	int sf_flag ;
}MAP;
MAP map[15][15] ;
int a , b ;

void init(){
	for(a = 0 ;a<15 ;a++){		
		for(b = 0 ; b<15 ;b++){
			map[a][b].sf_flag = 0 ;//初始化每个点
			map[a][b].color = -1 ;
		}
	}
}

int c_flag = 0 ;
int w_b = 0 ;//0下黑棋 非白棋 
int pos_x ,pos_y ;
int x ,y ;
int Lbd_flag = 0;
int i_flag ,j_flag ;
int step1 = 0 ,step2=0 ,step3=0 ,step4=0 ;
char *str[]={"黑方赢! 点击重新开始。" ,"白方赢!点击重新开始。","黑方","白方"};
int over_flag = 0 ;

/////////////////////////////////////
//窗口函数(回调函数)
LRESULT CALLBACK WndProc( HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam){
	
	HDC hDC ;
	RECT rect ;
	PAINTSTRUCT ps ;
	HFONT hF ;
	HBRUSH hBR1 ;
	HBRUSH hBR2 ;
	HPEN hPen1 ;
	HPEN hPen2 ;
	HCURSOR hcursor ;
	int i ,j;
	SIZE size ;
	switch(message)
	{
		
		//鼠标信息
	case WM_LBUTTONDOWN:
		pos_x = LOWORD(lParam) ;
		pos_y = HIWORD(lParam) ;
		Lbd_flag = 1 ;
		InvalidateRect(hWnd ,NULL ,TRUE) ;	
		break ;		
	case WM_MOUSEMOVE:		
		pos_x = LOWORD(lParam) ;
		pos_y = HIWORD(lParam) ;
		if(over_flag==0)
		InvalidateRect(hWnd ,NULL ,TRUE) ;
		break ;
	case WM_LBUTTONUP:
		
		break ;
	case WM_DESTROY:
		PostQuitMessage(0) ;
		break ;                            
	case WM_SIZE :
		InvalidateRect(hWnd ,NULL ,1) ;
		break ;
		
	case WM_PAINT:
		hDC = BeginPaint(hWnd ,&ps) ;
		GetClientRect(hWnd, &rect) ;
		hPen1 = CreatePen(PS_SOLID ,0 ,RGB(0,0,0)) ;
		hPen2 = CreatePen(PS_SOLID ,2 ,RGB(255,0,0)) ;
		hBR1 = CreateSolidBrush(RGB(255,255,255)) ;
		hBR2 = CreateSolidBrush(RGB(0,0,0)) ;
		SelectObject(hDC,hPen1) ;
		if(c_flag)
			TextOut(hDC,5,5,str[2],strlen(str[2])) ;
		else{
			GetTextExtentPoint32(hDC ,str[3],strlen(str[3]),&size) ;
			TextOut(hDC,rect.right-size.cx-5,5,str[3],strlen(str[3])) ;
		}


		//确定坐标
		for(i = 0 ;i<15 ;i++){		
			for(j = 0 ; j<15 ;j++){
				map[i][j].x = rect.right*(j+2)/18 ;
				map[i][j].y = rect.bottom*(i+2)/18 ;
			}
		}
		//画图		
		for(j = 0 ;j<15 ;j++){			
			MoveToEx(hDC,map[0][j].x,map[0][j].y ,NULL);
			LineTo(hDC,map[14][j].x ,map[14][j].y) ;
		}
		for(i = 0 ;i<15 ;i++){
			MoveToEx(hDC,map[i][0].x,map[i][0].y ,NULL);
			LineTo(hDC,map[i][14].x ,map[i][14].y) ;
		} 
		//五个小黑点
		SelectObject(hDC,hBR2) ;
		Ellipse(hDC ,map[3][3].x-4 ,map[3][3].y-4,
			map[3][3].x+4 ,map[3][3].y+4) ;
		Ellipse(hDC ,map[3][11].x-4 ,map[3][11].y-4,
			map[3][11].x+4 ,map[3][11].y+4) ;
		Ellipse(hDC ,map[7][7].x-4 ,map[7][7].y-4,
			map[7][7].x+4 ,map[7][7].y+4) ;
		Ellipse(hDC ,map[11][3].x-4 ,map[11][3].y-4,
			map[11][3].x+4 ,map[11][3].y+4) ;
		Ellipse(hDC ,map[11][11].x-4 ,map[11][11].y-4,
			map[11][11].x+4 ,map[11][11].y+4) ;
		//画小边界框与鼠标的变化
		for(i = 0 ;i < 15 ;i++){
			for(j = 0 ;j<15 ;j++){
				if(abs(pos_x-map[i][j].x)<rect.right/36 && abs(pos_y-map[i][j].y)<rect.bottom/36 ){
					x = map[i][j].x ;
					y = map[i][j].y ;
					hcursor = LoadCursor(NULL,IDC_SIZEALL);
					SetCursor(hcursor) ;
					break ;
				}
			}
		} 
		SelectObject(hDC,hPen2) ;
		MoveToEx(hDC,x-rect.right/36 ,y-rect.bottom/62 ,NULL) ;
		LineTo(hDC ,x-rect.right/36 ,y-rect.bottom/36) ;
		LineTo(hDC ,x-rect.right/62 ,y-rect.bottom/36) ;
		
		MoveToEx(hDC,x+rect.right/36 ,y-rect.bottom/62 ,NULL) ;
		LineTo(hDC ,x+rect.right/36 ,y-rect.bottom/36) ;
		LineTo(hDC ,x+rect.right/62 ,y-rect.bottom/36) ;
		
		MoveToEx(hDC,x-rect.right/36 ,y+rect.bottom/62 ,NULL) ;
		LineTo(hDC ,x-rect.right/36 ,y+rect.bottom/36) ;
		LineTo(hDC ,x-rect.right/62 ,y+rect.bottom/36) ;
		
		MoveToEx(hDC,x+rect.right/36 ,y+rect.bottom/62 ,NULL) ;
		LineTo(hDC ,x+rect.right/36 ,y+rect.bottom/36) ;
		LineTo(hDC ,x+rect.right/62 ,y+rect.bottom/36) ;
		
		//点击下棋
		if(Lbd_flag&&over_flag==0){
			for(i = 0 ;i<15 ;i++){		
				for(j = 0 ; j<15 ;j++){
					if(!map[i][j].sf_flag &&abs(pos_x-map[i][j].x)<rect.right/36 && abs(pos_y-map[i][j].y)<rect.bottom/36 ){
						map[i][j].sf_flag = 1 ;//标示该点已经被下了
						i_flag = i ;
						j_flag = j ;
						if(c_flag){//1代表黑色 0为白色
							map[i][j].color = c_flag;
							c_flag = 0 ;
						}else{
							map[i][j].color = c_flag ;
							c_flag = 1 ;
						}
					}		
				}
				
			}
			
		}
		//初始化
		if(over_flag){
			init();
			over_flag = 0 ;
		}
		SelectObject(hDC,hPen1) ;
		//画出棋子
		for(i = 0 ;i<15 ;i++){		
			for(j = 0 ; j<15 ;j++){
				if(map[i][j].sf_flag){
					if(map[i][j].color==1){
						SelectObject(hDC,hBR2) ;
						Ellipse(hDC,map[i][j].x-12,map[i][j].y-12,
							map[i][j].x+12,map[i][j].y+12) ;
					}else{
						SelectObject(hDC,hBR1) ;
						Ellipse(hDC,map[i][j].x-12 ,map[i][j].y-12,
							map[i][j].x+12,map[i][j].y+12) ;
					}
				}
			}
		}
		
		if(Lbd_flag){
			//判断一行是否有五子
			for(j=j_flag ;j<15 ;j++){
				//往右判断
				if(map[i_flag][j].sf_flag){
					if(map[i_flag][j].color==map[i_flag][j_flag].color){
						step1++ ;	
					}else
						break ;
				}
			}
			for(j=j_flag;j>0;j--){
				//往左
				if(map[i_flag][j].sf_flag){
					if(map[i_flag][j].color==map[i_flag][j_flag].color)
						step1++ ;
					else
						break ;
				}
			}

			//判断一列是否有五子
			for(i=i_flag ;i<15 ;i++){
				//往上判断
				if(map[i][j_flag].sf_flag){
					if(map[i][j_flag].color==map[i_flag][j_flag].color){
						step2++ ;	
					}else
						break ;
				}
			}
			for(i=i_flag;i>0;i--){
				//往下
				if(map[i][j_flag].sf_flag){
					if(map[i][j_flag].color==map[i_flag][j_flag].color)
						step2++ ;
					else
						break ;
				}
			}
			//判断\的方向
			for(i=i_flag,j=j_flag ;i<15 ,j<15;i++,j++){
				//往上判断
				if(map[i][j].sf_flag){
					if(map[i][j].color==map[i_flag][j_flag].color){
						step3++ ;	
					}else
						break ;
				}
			}
			for(i=i_flag,j=j_flag;i>0,j>0;i--,j--){
				//往下
				if(map[i][j].sf_flag){
					if(map[i][j].color==map[i_flag][j_flag].color)
						step3++ ;
					else
						break ;
				}
			}
			//判断/的方向
			for(i=i_flag,j=j_flag ;i>0 ,j<15;i--,j++){
				//往上判断
				if(map[i][j].sf_flag){
					if(map[i][j].color==map[i_flag][j_flag].color){
						step4++ ;	
					}else
						break ;
				}
			}
			for(i=i_flag,j=j_flag;i<15,j>0;i++,j--){
				//往下
				if(map[i][j].sf_flag){
					if(map[i][j].color==map[i_flag][j_flag].color)
						step4++ ;
					else
						break ;
				}
			}
			
			if(step1>5||step2>5||step3>5||step4>5){
				SetTextColor(hDC,RGB(255,0,0));
				SelectObject(hDC,hF) ;	
				GetTextExtentPoint32(hDC ,str[0],strlen(str[0]),&size) ;
				if(map[i_flag][j_flag].color==1)
					TextOut(hDC,(rect.right/2-size.cx/2),rect.bottom/18,str[0],strlen(str[0])) ;
				if(map[i_flag][j_flag].color==0)
					TextOut(hDC,(rect.right/2-size.cx/2),rect.bottom/18,str[1],strlen(str[1])) ;
				over_flag = 1 ;
			} 
			step1 = 0 ;
			step2 = 0 ;
			step3 = 0 ;
			step4 = 0 ;
			Lbd_flag = 0 ;
		}
		DeleteObject(hBR1) ;
		DeleteObject(hBR2) ;		
		DeleteObject(hPen1) ;
		DeleteObject(hPen2) ;
		EndPaint(hWnd,&ps) ;
		break ;
	default:
		return DefWindowProc(hWnd , message , wParam ,lParam) ;
		break ;		
		}
		
		return  0 ;
}


 

MFC小游戏开发实战:从零构建经典游戏,深入Windows桌面编程核心 Windows桌面程序开发的核心在于理解其消息驱动架构与图形界面原理。通过消息循环机制,系统将用户输入和系统事件转化为消息队列,应用程序通过处理这些消息实现交互响应。在图形绘制方面,GDI(图形设备接口)提供了基础的绘图能力,而GDI+则在此基础上增强了图形渲染效果。掌握这些底层技术对于构建稳定、高效的桌面应用具有重要价值,尤其在需要精细控制界面和性能的场景中。本文以开发经典小游戏(如俄罗斯方块)为实践载体,系统拆解了如何利用MFC框架实现游戏主循环模拟、双缓冲绘图解决画面闪烁、以及基于定时器的逻辑更新等关 阅读详情

相关推荐

使用C#编程在Windows任务栏上显示DesktopWindowXamlSource

在Windows操作系统中,任务栏是一个重要的界面元素,用于显示运行中的应用程序和系统状态。在这篇文章中,我将向您展示如何使用C#编程在Windows任务栏上显示一个名为DesktopWindowXamlSource的自定义内容。现在,我们已经完成了在任务栏上显示自定义内容的设置。,这将确保我们的XAML内容作为任务栏的子项显示出来。的XAML文件,在其中定义我们想要在任务栏上显示的内容。,这将设置我们在XAML中定义的内容作为任务栏上显示的内容。对象,我们能够在任务栏上显示自定义内容。

2301_79331387的博客 1098

五子棋(C语言实现)

讲解C语言实现五子棋

Han同学 4801

SDK五子棋源码(Vc++ sdk)

这是用VC++ 6.0 的SDK写的一个框架,然后在这个框架上写的一个五子棋的小游戏,语法简单,适合初学者

一个使用纯Win32 SDK和C语言实现的五子棋游戏

GobangGame这是一个使用纯Win32 SDK和C语言实现的五子棋游戏在这个游戏中实现的功能 [x] 绘制一个15 * 15的棋盘 [x] 绘制5个着重点位置 [x] 根据鼠标左键的点击,可以绘制出黑色棋子;根据鼠标右键的点击,可以绘制出白色棋子 [x] 根据鼠标中键的点击,可以初始化棋盘 [x] 根据鼠标点击的实际位置,可以计算转化为临近点最近的那个点,在这个点上绘制棋子 [x] 当鼠标位置

(ÒωÓױ) 2046

五子棋带人工智能算法VS2010 WindowsSDK源代码

代码完全使用API编写,可以选择与人或电脑对战,电脑有点弱,不过不仔细下还是会输的哦!代码建议用vs2010打开编译

windows下MFC编程 五子棋

在windows下 使用MFC编写的五子棋游戏 该游戏实现了人机对弈模式 大家可以自己试一下

c++怀旧五子棋win7版

//win7版 #include<iostream> #include<cstdio> #include<cstdlib> #include<time.h> #include<conio.h> #include<windows.h> #include<ctime> using namespace std; struct coordinate{ int X,Y; }Coor1[626],Coor2[626]; char G.

qi_programmer的博客 1020

WINDOWS程序设计 MFC课程设计报告五子棋

WINDOWS程序设计 MFC 课程设计报告 五子棋

C++语言实现五子棋游戏

本文介绍了一个基于C++开发的五子棋人机对战游戏。系统采用模块化设计,实现了包括窗口界面、游戏逻辑、AI算法等核心功能。通过Windows API构建图形界面,使用二维数组存储棋盘状态,并实现了三种难度级别的AI对战。开发过程中重点解决了界面渲染、胜负判断和AI决策等关键问题,同时提供了悔棋、计时等辅助功能。该系统展示了C++在游戏开发中的应用价值,具有结构清晰、功能完善的特点。

2401_84149564的博客 1337

win32 sdk 五子棋 功能简单

随便写写练习练习sdk 学习双缓冲 随便写写练习练习sdk 学习双缓冲

模拟Windows五子棋源代码

代码已通过Turbo C验证! 绝对可靠! 与windowns自带的可比美!

C++五子棋实战:从零构建Windows图形界面游戏

C++作为一门经典的面向对象编程语言,是学习计算机科学和软件开发的基石。其核心原理在于通过类、对象、继承和多态等机制组织代码,实现高内聚、低耦合的软件设计。掌握C++不仅能深入理解内存管理、数据结构和算法,更能为开发高性能桌面应用奠定基础。在工程实践中,Visual Studio作为强大的集成开发环境,为Windows平台下的C++开发提供了开箱即用的编译、调试和项目管理支持。结合Windows GDI图形设备接口,开发者可以高效实现图形界面的绘制与用户交互。本文以双人对战五子棋这一经典项目为具体应用场景,

weixin_33798152的博客 448

CDR学习笔记——02

这篇写一些高级CDR的架构原理。

... 1015

C++网络编程实战:从零构建在线五子棋对战引擎

网络编程是现代服务端开发的核心技术之一,它涉及如何在不同计算机之间建立可靠、高效的数据通信。其基本原理基于TCP/IP协议栈,通过Socket接口实现进程间通信。在技术价值上,网络编程能力是构建高并发、低延迟在线服务(如游戏、即时通讯、实时协作系统)的基石。掌握异步I/O、事件驱动、多路复用等模型,对于优化资源利用和提升系统吞吐量至关重要。应用场景广泛,从Web服务器、API网关到物联网设备通信,都离不开稳健的网络层实现。本文以构建一个支持多人在线实时对战的五子棋引擎为例,深入探讨如何运用C++、Boost

weixin_33922670的博客 443

【Chisel】2.4 时序逻辑

2.4 时序逻辑@[TOC](2.4 时序逻辑)前言寄存器(`Reg`)实例Chisel的状态函数实例2 RegNext实例3 RegInit移位器附录 显式的时钟信号和复位信号 前言 没有状态机的逻辑电路是不完整的,没有状态机的逻辑电路是不完整的,没有状态机的逻辑电路是不完整的,重要的事情说三遍。 这一节我们将要学习Chisel中的时序逻辑。在最后我们会实现一个移位器。 这里你需要知道的是,前面的这几节实际上都是对Chisel的基础语法的学习,它并不会给你带来很大的“惊喜”。Chisel真正的作用是把电路

快乐学习小猪猪的博客 843

思岚A1 上手教程

前言 寒假在家闲着也是闲着,索性就向是实验室借了一个思岚 A1激光雷达,来进一步完成自己的实验室实习项目。经过一个月在Linux上和ROS上的摸爬滚打,我已经对机器人开发和SLAM有了初步了解,现在就写个上手教程吧(以防自己以后忘了)。 Basic Support 硬件 一台电脑 思岚 A1激光雷达 软件 安装Virtual Box虚拟机 在虚拟机安装Ubuntu 16操作系统 在Ubuntu 16搭建ROS kinetic 简要步骤 1.现在w..

ajxdhe的博客 6383

我把那个Linux五子棋项目移植到了Windows VS2022:跨平台C项目实战与避坑指南

本文详细介绍了将Linux命令行五子棋项目成功移植到Windows VS2022环境的实战经验,涵盖环境准备、代码适配、构建系统转换等关键步骤。特别针对跨平台开发中的常见问题提供了解决方案,包括终端控制差异处理、平台特定头文件兼容性等,帮助开发者高效完成C语言项目的跨平台迁移。

weixin_27717759的博客 191

AC360变频器使用案例

AC360变频器使用案例!

QING_BOSS的博客 517

VC++实战:贪吃蛇、俄罗斯方块、五子棋与计算器开发全解析

Windows桌面开发是构建PC端应用程序的核心技术,其底层依赖于Win32 API和GDI图形设备接口。理解消息循环机制与图形绘制原理,是掌握桌面应用交互与渲染的基础,对于开发游戏和工具软件具有重要价值。通过实现经典小游戏,开发者能深入实践碰撞检测、状态管理、双缓冲防闪烁等关键技术。本文以贪吃蛇、俄罗斯方块、五子棋和计算器四个经典案例为蓝本,详细解析了在Visual Studio环境中使用VC++进行Win32桌面开发的完整流程,涵盖了从项目初始化、GDI绘图、游戏逻辑到简单AI算法的实现,为入门Wind

weixin_29014939的博客 336

基于深度学习的火焰检测系统:YOLOv8 + UI界面 + 数据集详解

YOLO(You Only Look Once)是一种端到端的目标检测算法,其最大优势在于将目标检测任务转化为一个回归问题,可以在一次前向传播中同时完成目标定位和分类。YOLOv8是YOLO系列中的最新版本,相比之前的版本,YOLOv8在精度和推理速度上都做了显著提升,特别是在小物体检测方面表现更加优秀。实时性:YOLOv8具有较高的推理速度,适用于实时火焰检测。高精度:相较于YOLOv7,YOLOv8在精度和小物体检测上有所改进。简单易用:YOLOv8的API简单直观,易于集成和使用。

YOLO 660

C#串口通信上位机开发实战:轻松实现硬件控制与数据交互

摘要:本文介绍如何使用C#开发串口通信上位机应用,实现与硬件设备(如传感器、PLC等)的数据交互。文章涵盖串口通信原理、开发环境配置、功能实现(串口连接管理、数据收发、实时显示)及UI设计,重点讲解SerialPort类的应用、多线程数据接收处理和错误优化。通过Windows Forms构建直观界面,帮助开发者快速掌握工业控制和自动化系统中的串口通信技术,为物联网和智能设备开发提供实用解决方案。全文约150字。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 3029

菜鸟开发—— c# 基于蓝牙的手机五子棋游戏开发(一)

前言:       都读大学两年了,也做了两年的技术,我是学习C#的!一直想拥有自己的博文,但是一直没有时间来写,这是我的第一篇文章,会存在很多的问题,希望大家能够提出来,我们互相学习,共同进步,在此谢谢了。最近我从零开始学习,开发了一款基于蓝牙的手机五子棋对战类游戏,学到了不少东西! 在此,给大家分享一下,废话不说了,现在开始正题……       下面的一些文件名,我一般都会全称,方便我们的开发新手在Google上搜索下载!一:环境的配置    们使用的是vs2005作为开发平台,关于智能机的开发,VS自

CHB的砖栏 1716

Android Jetpack 最全面试题及参考答案

要使用 WorkManager 定义一个异步任务,以下是详细步骤。首先,需要创建一个继承自 Worker 类的自定义类,这个类代表了要执行的具体任务逻辑。// 在这里编写具体的任务逻辑,比如从网络下载文件try {在上述代码中,doWork方法就是任务的核心执行逻辑所在,这里模拟了从给定的 URL 下载文件到本地的操作,若下载成功返回,若出现异常则返回。然后,在需要调度任务的地方,比如在某个 Activity 或者 Fragment 中,通过构建 WorkRequest 来安排任务执行。

大模型大数据攻城狮的专栏 1895

Windows 网络游戏编程--序章

由于毕业设计要选论文题目,本来想从前几年的题目中选一个的,但是看过那些题目后,感觉没有一个适合自己的。仔细想了下,自己对游戏兴趣还是蛮大的,平时也经常玩LOL,CF,斗地主....之类的游戏。所以就把自己的毕业设计题目定成了“基于Windows平台的网络游戏设计”,这个题目可以简单写一个欢乐斗地主,复杂的可以写一个CF这样的游戏。由于本人在开始写毕业设计之前,游戏开发的经验基本上为0,所以选择了这

stw631884352的专栏 498

构建自己的 Qt 插件系统

Qt 本身提供了插件相关的技术,但并没有提供一个通用的插件框架!倘若要开发一个较大的 GUI 应用程序,并希望使其可扩展,那么拥有这样一个插件框架无疑会带来很大的好处。

青春不老,奋斗不止! 2万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: Algorithm DFS的初认识
下一篇: Android 的学习之路
CallMeJiaGu
博客等级 码龄12年 149粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值