網(wǎng)上有很多關于pos機程序開發(fā),如何開發(fā)一個蘋果手機App的知識,也有很多人為大家解答關于pos機程序開發(fā)的問題,今天pos機之家(www.dsth100338.com)為大家整理了關于這方面的知識,讓我們一起來看下吧!
本文目錄一覽:
pos機程序開發(fā)
俄羅斯方塊游戲,是風靡世界幾十年的經典游戲,相信絕大多數(shù)人都玩過這個游戲,那么它是怎樣編寫出來的,我們如何才能自己編寫一個這樣的游戲呢?
游戲開發(fā)步驟要編寫一個游戲,基本按照以下一些步驟進行:
1.游戲規(guī)則定義
游戲規(guī)則決定了這個游戲怎么玩,好不好玩,也就決定了編寫程序實現(xiàn)的目標。不同的需求導致不同的規(guī)則,不同的規(guī)則就需要不同的方法去實現(xiàn)。
例如,俄羅斯方塊是由哪些類型方塊組成,棋盤布局是9*18還是10*20,是否允許旋轉,消掉一行獲得的分數(shù)和獲得多行獲得的分數(shù)如何進行累加,等等。
2.選擇游戲運行平臺和界面設計
在很多種平臺上都可以玩游戲,常見的比如電腦pc或者筆記本上面直接運行游戲exe程序,或者在電腦瀏覽器中運行flash游戲,或者手機上運行游戲App,或者在特殊游戲機比如xbox等上直接運行游戲程序,或者在VR設備上運行游戲程序。
不同的平臺,需要不同的實現(xiàn)方式,也就需要用不同的程序或開發(fā)語言開發(fā)工具來實現(xiàn)。
例如,在網(wǎng)頁上開發(fā)游戲,可以用html+css+js實現(xiàn),也可以用flash實現(xiàn);在手機上開發(fā)游戲,可以用java語言在android系統(tǒng)中實現(xiàn),也可以用objective-c在ios系統(tǒng)上實現(xiàn);在電腦pc機上可以用c語言在windows系統(tǒng)中實現(xiàn)。
界面設計就是根據(jù)游戲規(guī)則決定人機交互界面,決定了輸入和輸出的方式。
例如,俄羅斯方塊可以設計成左邊是棋盤,右側上面是分數(shù),下一個方塊,還可以放一個重新來一句按鈕,或者暫停按鈕等等。
方塊設計成純一種顏色塊,還是多種顏色塊,或者是方的還是圓的,或者是卡通圖案,這些就是界面設計。
3.考慮編程思路和算法設計
如果決定了在哪種平臺以及用何種開發(fā)語言來編程實現(xiàn)游戲,則要考慮編程的思路,數(shù)據(jù)的存儲,以及具體的算法。
例如,俄羅斯方塊根據(jù)棋盤大小是用二維數(shù)組來實現(xiàn),還是用一維數(shù)組來實現(xiàn),還是用字典表來實現(xiàn)
一局游戲是定時計算,還是用一個循環(huán)來處理
如何保存下一個類型,如何計算分數(shù),如何判斷一個方塊是否落地不能再移動,如何判斷一行是否已經被填滿,如何判斷游戲已經結束
4.按照前面設計的思路編寫代碼實現(xiàn)
考慮好編程思路和算法設計之后,可以按照設想進行實際的編程開發(fā)
不停的驗證思路,通過開發(fā)中的實際情況,可能對編程思路進行修改調整,直到完成整個游戲功能
代碼就是一行一行的編寫出來,直到成為一個可以運行的游戲程序
5.游戲測試
測試就是把自己當成實際用戶來運行游戲程序,找到游戲可能存在的問題,避免程序沒有按照預期執(zhí)行,防止程序崩潰死機等情況,驗證游戲確實按照游戲規(guī)則能完整可靠的運行,這個開發(fā)人員可以找其他人進行測試,防止自己存在思維盲區(qū)。
6.游戲發(fā)布
游戲測試完成之后,就可以將游戲發(fā)布到相應的渠道或者平臺,讓更多的人可以玩到這個游戲。
例如,蘋果手機App可以發(fā)布到蘋果的AppStore,安卓手機App可以發(fā)布到各大應用市場。
最簡單的發(fā)布就是直接發(fā)送給自己的朋友,讓他們大吃一驚。
游戲規(guī)則定義俄羅斯方塊游戲有如下規(guī)則:
棋盤由寬度為10格高度為20格的方塊組成
方塊共有7種形態(tài):
長條形1個,正方形1個,T型1個,L型2個,S型2個
方塊出現(xiàn)在最上方正中間,同時知道下一個方塊是什么
方塊往下掉落,每隔1秒下落一行
方塊下落中如果碰到有方塊阻擋不能下落則停止下落
方塊停止下落后,判斷是否有整行都被方塊填滿,如果有,則整行消失,上面的全部行整體下落一行
統(tǒng)計消掉的總行數(shù)
方塊在下落過程中,可以按向下方向鍵讓方塊直接掉落到直到停止位置
可以按向左或者向右方向鍵讓方塊進行旋轉,每按鍵一次旋轉90度
如果沒有足夠的空間讓方塊落下則游戲結束
游戲運行平臺和界面設計如果以最流行的蘋果手機作為游戲運行環(huán)境,則需要開發(fā)一個蘋果手機App
蘋果手機使用的是iOS操作系統(tǒng),開發(fā)環(huán)境需要Mac電腦和開發(fā)工具軟件Xcode
開發(fā)語言可以使用objective-C,開發(fā)游戲可以使開發(fā)用工具包cocos2d
如果需要發(fā)布到蘋果AppStore,則需要一個開發(fā)者賬號,以及一年99美金
界面設計:
程序啟動之后進入主界面,只能豎屏顯示游戲
主界面分為左右部分
左邊為棋盤:顯示整個棋盤,正方形的格子組成,寬10格高20格
按照蘋果手機尺寸320點*480點來設計,20格高度為480點,則寬度10格占用240點
因此左邊棋盤占用240點,右側剩余80點
右邊分為上部和下部
上部為狀態(tài)欄靠上顯示:最上方顯示顯示當前消掉的行數(shù),下面顯示方塊類型小圖標
下部為按鈕欄靠下顯示:從上往下顯示3個按鈕,排行榜/關于/重新開始
大概的界面設計如下示意圖:
界面運行邏輯:
點擊排行榜按鈕進入一個新頁面,上面顯示消掉的行數(shù)最多的8個行數(shù)數(shù)字,下面是一個返回按鈕
點擊關于按鈕進入一個新頁面,上面顯示一張說明圖片,下面是一個返回按鈕
點擊重新開始按鈕,將當前棋盤清空并重新開始一局游戲,游戲啟動
游戲啟動之后,第一個方塊從最上面中間開始往下掉落,每秒下落一行
同時,上方的狀態(tài)欄,顯示下一個即將出現(xiàn)的方塊類型小圖標
方塊下落過程中,在屏幕上單指左滑可以向左逆時針旋轉當前方塊,或者在屏幕上單指右滑可以向右順時針旋轉當前方塊
還可以在屏幕上單指下滑可以讓當前方塊直接掉落到底部
方塊如果不能再往下移動一行的時候,則方塊停止,同時開始判斷是否能夠消掉某些行
如果能夠消掉某些行,則統(tǒng)計消掉的行數(shù),增加到上方狀態(tài)欄顯示消掉的數(shù)字上,刷新顯示
消掉的行從屏幕上消除,同時上方的所有行往下整體移動
加入棋盤最上方中間的供方塊出現(xiàn)的地方已經被方塊占住了,則認為這一局游戲結束
游戲結束則彈出一個窗口顯示游戲結束信息,顯示總共消掉了多少行,然后將該記錄保存到數(shù)據(jù)庫中
彈出窗口上有返回按鈕,點擊返回按鈕,彈出窗口關閉,回到游戲主界面,主界面停止游戲,點擊重新開始按鈕開始新一局
編程思路和算法設計數(shù)據(jù)存儲:
考慮用二維列表來存儲棋盤上的每一個格子
[[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0],
......
[0,0,0,0,0,0,0,0,0,0]]
二維列表里面,第一層是放總計20行,第二層里面是放每一行的10個格子
如果格子里面有方塊,則存放數(shù)字1,如果沒有方塊則存放數(shù)字0
判斷一行如果全部是1,則表示該行填滿了方格,需要消掉
使用下列數(shù)字來對7種方塊進行區(qū)分,存儲2個變量,當前方塊和下一個方塊
1:長條形 2:正方形 3:T型 4:L型向左 5:L型向右 6:S型左上右下 7:S型右上左下
生成下一個方塊則使用隨機函數(shù)生成1到7當中的隨機數(shù)
然后不同方塊如果進行了旋轉會出現(xiàn)不同的狀態(tài),定義旋轉狀態(tài)如下:
11:豎立長條 12:橫排長條
21:正方形
31:T型尖頭朝下 32:T型尖頭朝左 33:T型尖頭朝上 34:T型尖頭朝右
41:L型短頭向左長頭向上 42:L型短頭向上長頭向右 43:L型短頭向右長頭向下 44:L型短頭向下長頭向左
51:L型短頭向右長頭向上 52:L型短頭向下長頭向右 53:L型短頭向左長頭向下 54:L型短頭向上長頭向左
61:S型左上右下豎立 62:S型左上右下橫排
71:S型右上左下豎立 72:S型右上左下橫排
使用2個變量x,y存儲當前方塊的左上角的方塊的行號和列號
使用變量存儲當前已經消除的行數(shù)
算法設計:
點擊重新開始按鈕后,主程序啟動
清空整個棋盤,對二維列表全部數(shù)字清零
然后生成第1個隨機數(shù),賦值給當前方塊變量
然后生成第2個隨機數(shù),賦值給下一個方塊變量
刷新顯示頁面
進入定時處理函數(shù),定時間隔時間為1秒:
定時處理函數(shù):
判斷當前方塊如果可以往下移動,則向下移動,修改二維列表變量
如果不可以下移了,則判斷是否可以消除某行,如果消除了某行則上方的所有行的值整體下移一行
如果不可以下移也不可以消除了,則將下一個方塊的數(shù)值賦值給當前方塊,隨機數(shù)生成下一個方塊
然后判斷當前方塊是否可以放入棋盤最上方的中間位置,如果可以放入則修改二維列表變量,如果不能放入,則游戲結束
判斷當前方塊是否可以下移函數(shù):
根據(jù)當前方塊類型變量,以及方塊當前旋轉狀態(tài),結合二維列表變量判斷,舉例:
如果是11豎立長條形,則根據(jù)當前方塊左上角的行號和列號,可以知道最下方的坐標位置
比如x=0行,y=5列,則最下方的坐標為(3,5),那么只要看二維列表的(4,5)如果為1則不可下移,否則可以下移
比如如果是31:T型尖頭朝下
x=0,y=4,那么下方可能有3個方塊可能碰到阻礙,分別是(0,4)/(1,5)/(0,6)
那么只要看二維列表的(1,4)/(2,5)/(1,6)只要有一個為1則不可下移,否則可以下移
判斷是否可以消除某行函數(shù):
對二維列表進行循環(huán),如果一行當中的所有值都為1,則可以消除
直接將所有上面的行的值往下復制,最上面一行的值全部賦值為0,同時總的消除行數(shù)變量加1
判斷當前方塊是否可以放入棋盤最上方的中間位置函數(shù):
根據(jù)當前方塊類型變量,以及方塊當前旋轉狀態(tài),結合二維列表變量判斷,舉例:
如果是1長條形,默認為11樹立長條形
則需要判斷(0,5)/(1,5)/(2,5)/(3,5)這4個坐標在二維列表中是否為1,只要有1個位置為1則不可放入
比如如果是3T型尖頭朝下
則需要判斷(0,4)/(0,5)/(0,6)/(1,5)這4個坐標
旋轉處理:
總共允許有3種滑動手指操作,向下/向左/向右
向下滑動手指,表示將當前方塊直接掉落到最下方直到碰到阻礙停住
向左滑動手指,表示將當前方塊進行逆時針旋轉
向右滑動手指,表示將當前方塊進行順時針旋轉
向下掉落處理:
重復調用前面定義的判斷當前方塊是否可以下移函數(shù)
從第一行循環(huán)到最后一行坐標,即可得出最多可以掉落到哪一行
逆時針旋轉處理:
根據(jù)當前方塊類型變量,以及方塊當前旋轉狀態(tài),結合二維列表變量判斷,舉例:
如果是11豎立長條形,旋轉中心點取從上往下第2個方塊
那么根據(jù)旋轉后需要占用的位置,需要判斷(1,4)/(1,6)/(1,7)這3個位置在二維列表中的值必須是0才可以旋轉
旋轉完成后應該左上角坐標應該從(0,5)變成(1,4),方塊當前旋轉狀態(tài)從11變成12
請看下面的示意圖:
那么,順時針旋轉和這個類似,只是選擇后的左上角左邊變量變化,以及方塊當前旋轉狀態(tài)值變化
由于篇幅所限,這里只能大概描述核心的一些代碼實現(xiàn)方式
開發(fā)準備:
首先取注冊一個AppleID
然后在Mac電腦上安裝好Xcode開發(fā)軟件
引入相關工具開發(fā)包:
導入cocos2d開發(fā)工具包以及需要的一些系統(tǒng)Frameworks
數(shù)據(jù)操作類:
AllData.h
#define SIZE 24
#define width="360px",height="auto" />
#define HEIGHT 480
@interface AllData : NSObject
@property int next;
@property int current;
@property int currentstatus;
@property int posx;
@property int posy;
@property int alllines;
@property (nonatomic,retain) NSMutableArray *numberdatas;
//取得當前類的實例
+(AllData *) sharedAllData;
//初始化棋盤
-(void)initAllData;
//取得下一個方塊
-(int) getNextValue;
//逆時針旋轉當前方塊
-(void)changeLeft;
//順時針旋轉當前方塊
-(void)changeRight;
//判斷是否可以下移當前方塊
-(boolean)canMoveDown;
//處理消除慢行操作
-(void)removeLines;
@end
存儲控制類:
DBUtil.h
@interface DBUtil : NSObject
+ (NSString *)dataFilePath;
+ (void)initDataBase;
//存儲一局游戲消除行數(shù)數(shù)字
+(void)insertOneData:(int)topnumber;
//取得最大的8個記錄數(shù):消除行數(shù)
+ (NSMutableArray *)getListDataFromDb;
@end
方塊繪畫類:
#import "CommonUtil.h"
#import "AllData.h"
@implementation CommonUtil
//繪畫棋盤當中的一個格子
+ (void) drawOneNumber:(int)number pos:(CGPoint)pos layer:(CCLayer*)layer {
CCSpriteBatchNode *numbatch = [CCSpriteBatchNode batchNodeWithFile:[NSString stringWithFormat:@"num_%d.png",number] capacity:15];
numbatch.anchorPoint = CGPointZero;
[numbatch setPosition:pos];
[layer addChild:numbatch];
CCSprite *sprite1 = [CCSprite spriteWithTexture:numbatch.texture rect:CGRectMake(0, 0, SIZE-2, SIZE-2)];
sprite1.position = ccp(0,0);
sprite1.anchorPoint = CGPointZero;
[numbatch addChild:sprite1];
}
// 繪畫整個棋盤
......
啟動進入主界面:
@implementation AppDelegate
- (void) applicationDidFinishLaunching:(UIApplication*)application
{
......
[[AllData sharedAllData] initAllData];
[DBUtil initDataBase];
[[CCDirector sharedDirector] runWithScene: [MainLayer scene]];
.......
狀態(tài)欄和工具欄:
@interface ToolLayer : CCLayer {
}
@implementation ToolLayer
- (void) drawTool {
[self removeAllChildrenWithCleanup:YES];
//畫底部背景
CCSprite *bg = [CCSprite spriteWithFile:@"tool_bootom_back.png"];
bg.anchorPoint = CGPointZero;
[self addChild:bg z:0 tag:0];
//排行按鈕
CCMenuItem *gold = [CCMenuItemImage itemFromNormalImage:@"gold.png" selectedImage:@"gold_pressed.png" target:self selector:@selector(gold:)];
//關于按鈕
CCMenuItem *about = [CCMenuItemImage itemFromNormalImage:@"about.png" selectedImage:@"about_pressed.png" target:self selector:@selector(about:)];
//重新開始按鈕
CCMenuItem *restart = [CCMenuItemImage itemFromNormalImage:@"restart.png" selectedImage:@"restart_pressed.png" target:self selector:@selector(restart:)];
......
// 繪畫消除行數(shù)的圖標
// 繪畫消除行數(shù)的數(shù)字
// 繪畫下一個方塊的圖標
- (void) restart:(id) sender
{
[[AllData sharedAllData] initAllData];
MapLayer *mapLayer = (MapLayer *)[[CCDirector sharedDirector].runningScene getChildByTag:0];
[mapLayer startGame];
[self drawTool];
}
棋盤滑動手勢控制方法:
- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSSet *allTouches = [event allTouches];
switch ([allTouches count])
{
case 1:
{
UITouch *touch1 = [[allTouches allObjects] objectAtIndex:0];
single = [touch1 locationInView:[touch1 view]];
} break;
default:
break;
}
}
- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
NSSet *allTouches = [event allTouches];
switch ([allTouches count])
{
case 1:
{
UITouch *touch1 = [[allTouches allObjects] objectAtIndex:0];
CGPoint singleend = [touch1 locationInView:[touch1 view]];
float x = single.x - singleend.x;
float y = single.y - singleend.y;
if (x*x > y*y && x*x > 2500 && x > 0) {
//向左橫向滑動超過50
NSLog(@"左");
[self changeLeft];
}else if (x*x > y*y && x*x > 2500 && x < 0) {
//向右橫向滑動超過50
NSLog(@"右");
[self changeRight];
}else if (x*x < y*y && y*y > 2500 && y < 0) {
//向下縱向滑動超過50
NSLog(@"下");
[self moveDown];
}
} break;
default:
break;
}
}
主界面程序:
@interface MapLayer : CCLayer {
}
@implementation MapLayer
-(void) startGame{
[self removeAllChildrenWithCleanup:YES];
int toppos = 0;
for (NSMutableArray *onerow in [AllData sharedAllData].numberdatas) {
int leftpos = 0;
toppos = toppos + SIZE + 1;
for (NSNumber *onepos in onerow) {
leftpos = leftpos + SIZE + 1;
[CommonUtil drawOneNumber:[onepos intValue] pos:CGPointMake(leftpos, toppos) layer:self];
}
}
// 設置定時器處理函數(shù),定時間隔時間1秒
......
}
//定時器處理函數(shù)
//判斷當前方塊如果可以往下移動,則向下移動,修改二維列表變量
//如果不可以下移了,則判斷是否可以消除某行,如果消除了某行則上方的所有行的值整體下移一行
//如果不可以下移也不可以消除了,則將下一個方塊的數(shù)值賦值給當前方塊,隨機數(shù)生成下一個方塊
//然后判斷當前方塊是否可以放入棋盤最上方的中間位置,如果可以放入則修改二維列表變量,如果不能放入,則游戲結束
......
具體代碼這里不貼了,有了詳細的算法程序設計和數(shù)據(jù)存儲類型,要實現(xiàn)出來并不是太難,只是需要耐心細心而已。
游戲測試游戲的主體程序完成后,就可以一邊測試一邊修改
測試的時候要注意測試各種邊界情況,例如
將當前方塊移動到最左邊,看看碰到邊界的時候會不會出錯
將當前方塊卡入一個正好插入的空槽形狀中,看程序是不是會出錯
等待當前方塊掉入一個空槽,然后立刻旋轉,理論上應該不能旋轉了,測試看看程序會不會出錯
測試一次性消掉4行,看看程序是不是會出錯
如果自己測試的差不多了,就可以將程序打包發(fā)送給朋友測試
有時候,開發(fā)的人很難測試自己編寫的程序,但是反而讓別人可以測試出來很多問題
下面介紹一下大概的發(fā)布流程,讓大家有個初步印象,詳細的發(fā)布流程網(wǎng)上可以搜索到很多
游戲測試到基本沒有錯誤之后,就可以將游戲發(fā)布到蘋果的AppStore了
發(fā)布App需要購買蘋果的開發(fā)者賬號,一年是99美金,目前用信用卡支付也很方便
然后登陸https://developer.apple.com,進行一些證書的設置
生成好證書之后,將證書下載到Mac電腦中導入到Xcode之中
然后使用Xcode進行編譯和打包好一個ipa文件
然后登陸https://itunesconnect.apple.com創(chuàng)建一個App,填寫一些介紹信息,需要一些App的截圖
然后回到Xcode使用Application Loader這個工具軟件將ipa文件上傳到itunesconnect當中
然后回到itunesconnect網(wǎng)站上提交App
然后就是等待蘋果AppStore的審核,一般7-10個工作日可以完成審核
完成審核之后,你的App就會出現(xiàn)在蘋果手機的AppStore里面了,就可以搜索到了
然后就可以告訴你的朋友們,讓他們大吃一驚吧。
因為教程是系列教程,前后關聯(lián)性非常強,請大家按照微信公眾號【零基礎學編程】的歷史消息發(fā)布時間先后次序進行閱讀。
軟件開發(fā)工具?
軟件開發(fā)工具是用于輔助軟件生命周期過程的基于計算機的工具。通常可以設計并實現(xiàn)工具來支持特定的軟件工程方法,減少手工方式管理的負擔。與軟件工程方法一樣,他們試圖讓軟件工程更加系統(tǒng)化,工具的種類包括支持單個任務的工具及囊括整個生命周期的工具。
(1)高可易用性 Jupiter使用簡單的文件向導方式,來呈現(xiàn)整個應用系統(tǒng)以及工作流程,然后將不同應用條件分為不同屬性。這種方法非常有效地實現(xiàn)了分析過程,簡化了系統(tǒng)需求的定義,在系統(tǒng)定義完成時,只需按一個按鈕就可以產生文檔及程序源代碼。
(2)迅速的應用開發(fā)
Jupiter補充強化了傳統(tǒng)的開發(fā)方法,自動化生產90%以上的VB6.0、.NET、J2EE代碼,大大提升了應用系統(tǒng)的開發(fā)效率,還能提供: 數(shù)據(jù)庫配置 表單關系圖 程序說明書 軟件功能清單 使用手冊 幫助文檔 權限管理--角色/安全措施定義 一次開發(fā),多語言支持,包括英文、簡體中文、繁體中文…… Jupiter平臺可以方便的進行ERP、CRM、SCM、OA、POS等系統(tǒng)的快速開發(fā),其使用者包括亞思捷軟件等公司。
軟件開發(fā)工具
指的是很方便地把一種編程語言代碼化并編譯執(zhí)行的工具。其中主要的語言開發(fā)工具有幾大類:java開發(fā)工具、net開發(fā)工具、delphi開發(fā)工具等。
以上就是關于pos機程序開發(fā),如何開發(fā)一個蘋果手機App的知識,后面我們會繼續(xù)為大家整理關于pos機程序開發(fā)的知識,希望能夠幫助到大家!
