-
Notifications
You must be signed in to change notification settings - Fork 21
Expand file tree
/
Copy pathChapter_III-1.tex
More file actions
1171 lines (975 loc) · 51.3 KB
/
Copy pathChapter_III-1.tex
File metadata and controls
1171 lines (975 loc) · 51.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
\chapter{تثبيت \textenglish{SDL}}
ابتداءً من الآن، انتهت الدروس النظرية! لأننا سنمرّ إلى مرحلة مهمّة، وسنستمتع بالتطبيق بالاستعانة بمكتبة نسميها
\underline{\textenglish{SDL}}.
في الفصول السابقة كنا قد تطرّقنا تقريبًا لكلّ أساسيات اللغة
\textenglish{C}،
لكن تبقى هناك دائمًا بعض التفاصيل الصعبة نوعًا ما لنكتشفها. سأقول لك بأنه يُمكن لهذا الكتاب أن يتوقّف هنا مخبرا إيّاك: "نعم لقد تعلّمت البرمجة بلغة
\textenglish{C}"،
لكني متأكّد بأن الجميع سيشاركني الرأي لو قلت بأن المُبرمج سيحسّ نفسه دائمًا مبتدئًا مادام لم "يخرج" من الكونسول!
\textenglish{SDL}
هي مكتبة تُستخدم خاصّة لإنشاء ألعاب ثنائية الأبعاد. سنتعرّف في هذا الفصل على هذه المكتبة ونتعلّم كيف نقوم بتثبيتها.
نسمي هذا النوع من المكتبات بمكتبات الطرف الثالث
(\textenglish{Third party libraries}).
يجب أن تعرف أنه يوجد نوعان من المكتبات:
\begin{itemize}
\item \textbf{المكتبة القياسية}
(\textenglish{Standard library}):
وهي المكتبة القاعدية التي تعمل على كلّ أنظمة التشغيل (من هنا تم استنباط الكلمة
\textenglish{standard})
وهي تسمح بالقيام بأمور بسيطة كـ\InlineCode{printf}.
هذه المكتبات يتمّ تسطيبها تلقائيّا عند تثبيتك للبيئة التطويرية والمترجم.
خلال الجزأين الأوّلين من هذا الكتاب، كناّ قد استعملنا المكتبة القياسيّة فقط
(\InlineCode{stdlib.h}، \InlineCode{stdio.h}، \InlineCode{string.h}، \InlineCode{time.h}\dots).
لم نقم بدراستها بالتفصيل لكنّا جرّبنا منها جزءً كبيرًا. إن كنت تريد معرفة المزيد عن هذا النوع من المكتبات أجْرِ بحثًا في
\textenglish{Google}،
مثلًا بكتابة
"\textenglish{C standard library}"،
وستجد نماذج الدوال في هذه المكتبة، بالإضافة إلى شرح قصير حول دور كلّ دالة.
\item \textbf{مكتبات الطرف الثالث}
(\textenglish{Third party libraries}):
هي مكتبات لا يتم تثبيتها تلقائيا. وإنّما يجب عليك تنزيلها من الأنترنت وتثبيتها بنفسك على حاسوبك.
على عكس المكتبات القياسية، التي تكون بسيطة نسبيّا وتحتوي على عدد قليل من الدوال، فإنه توجد الآلاف من مكتبات الطرف الثالث، والتي تمت كتابتها من طرف مبرمجين آخرين. بعضها جيّدة، وأخرى أقل، بعضها مدفوع، وبعضها الآخر مجاني، إلخ. الأمر المثالي هو إيجاد مكتبة جيّدة ومجانية في نفس الوقت!
\end{itemize}
إنه لمن المستحيل أن أضع لك درسًا يشرح كل المكتبات الموجودة. حتّى لو أمضيت حياتي كلّها 24 ساعة / 24، لن أستطيع!\\
لذا سأقدّم لك مكتبة واحدة فقط مكتوبة بالـ\textenglish{C} ومُستعملة من طرف مبرمجين مثلك.
هذه المكتبة تدعى
\textit{\textenglish{SDL}}.
السؤال المطروح هو لماذا اخترت هذه المكتبة بالضبط؟ ما الذي يميّزها عن باقي المكتبات؟\\
هذه أسئلة سأبدأ في الإجابة عليها انطلاقًا من الآن.
\section{لماذا نختار \textenglish{SDL}؟}
\subsection{اختيار مكتبة ليس بالأمر السهل!}
كما قلت لك الآن، توجد الآلاف من المكتبات للتنزيل.\\
بعضها بسيط، وبعضها كبير جدًا لدرجة أن درسًا كهذا لا يكفي أن يشرحها كلّها!
الاختيار صعب. لكنّي اخترت هذه المكتبة، التي هي نوعًا ما سهلة الاستعمال، كبداية. ستكون هذه إذا أوّل مكتبة تقوم باستعمالها (إذا لم نحسب المكتبة القياسية).
إنه من الواضح أن أغلب القرّاء يريدون معرفة كيفية فتح نوافذ، إنشاء لعبة، إلخ. ولكن إن كنت تحب الكونسول فيمكننا الاستمرار فيها لوقت أطول، إذا أردت، لا؟ إذا لدينا هنا بعض الفضول! \\
أودّ كثيرًا أن أريك كيف تعمل كلّ هذه الأمور، لكننا سنحاول أن نتطرّق إليها خطوة بخطوة، وبالنسبة للأعمال التطبيقية، فلدينا عملان تطبيقيان لهذا الجزء من الكتاب!
لقد اخترت لك مكتبة سهلة وقوية، ستكون كبداية لك في تحقيق (تقريبا) أحلامك المتعلّقة بالواجهة الرسومية، ومن دون تعب (حسنًا، كلّ شيء نسبيّ بالطبع!).
\subsection{\textenglish{SDL}، اختيار جيّد!}
سنقوم الآن بدراسة هذه المكتبة. لماذا اخترتها هي وليس أخرى؟
\begin{figure}[H]
\centering
\includegraphics[width=0.2\textwidth]{Chapter_III-1_SDL}
\end{figure}
\begin{itemize}
\item \textbf{هي مكتبة مكتوبة بلغة
\textenglish{C}}:
أي أنه بإمكان المبرمجين أن يستعملوها في برامجهم المكتوبة بـ\textenglish{C}.
وكما هو الحال بالنسبة لأغلب المكتبات المكتوبة بـ\textenglish{C}،
يمكن استعمالها في لغة \textenglish{C++}
بالإضافة إلى لغات برمجية أخرى.
\item \textbf{هي مكتبة حُرّة ومجانية}:
و هذا كي لا تضطرّ لدفع أي ثمن مقابل استعمالك ما سأقدّمه لك في بقيّة الكتاب. على عكس ما قد نعتقد، إيجاد مكتبة جيدة ومجانية ليس أمرًا صعبًا كثيرًا، فقد انتشرت كثيرًا في أيامنا هذه. المكتبة الحرة هي ببساطة مكتبة يمكنك الحصول على الشفرة المصدرية الخاصة بها. في حالتنا هذه، رؤية الشفرة ليس مُهمّا بالنسبة لنا. لكن كونها حرة يفتح لنا الباب من أجل ميزات أخرى أهمّها المداومة (أي أنه إن توقف صاحب المكتبة عن تطويرها، يُمكن لمبرمجين آخرين أن يكملوا عمله)، بالإضافة إلى مجّانيّتها غالبا. هذا يعني عدم إمكانيّة اختفاء المكتبة في يوم من الأيام.
\item \textbf{يُمكنك إنشاء برامج تجارية ذات ملكية خاصة بفضل هذه المكتبة}.
قد أكون قد تسرّعت بهذا الكلام، لكنّه يجب اختيار مكتبة حرّة تمنحك الحريّة الأقصى. الحقيقة أنه يوجد نوعان من المكتبات الحُرة:
\begin{itemize}
\item المكتبات تحت
\textbf{رخصة \textenglish{GPL}}:
مكتبات مجانية، ويمكنك رؤية الشفرة المصدرية الخاصة بها، لكن بشرط أن تقوم أنت كذلك بنشر الشفرة المصدرية الخاصة بالبرنامج الذي أنشأته باستخدامها.
\item المكتبات تحت
\textbf{رخصة \textenglish{LGPL}}:
مثل سابقتها، لكن ليس عليك أن تنشر الشفرة المصدرية الخاصة بالبرنامج. أي أنه يمكنك بها إنشاء برامج مملوكة.
\end{itemize}
\begin{information}
بالرغم من أنه يمكنك قانونيّا عدم نشر الشفرة المصدرية الخاصة بالبرنامج، إلا أنني أنصحك بذلك. فبهذا يمكنك أن تأخذ رأي المبرمجين الأكثر تمرّسًا منك. وهذا يسمح لك بالتحسّن. بعد هذا، فإن إنشاء برنامج حُر أو ذو ملكية خاصة، يرجع لطبيعة تفكير كل شخص. لن أدخل في نقاش بخصوص هذا الموضوع، لكن فلتعلم أن كلّ النوعين له مميزاته ومساوئه.
\end{information}
\item هي مكتبة
\textbf{متعددة المنصّات}
(\textenglish{Multi-platform}):
سواء كنت على
\textenglish{Windows}،
\textenglish{\mbox{Mac OS X}}
أو
\textenglish{\mbox{GNU/Linux}}،
ستعمل لديك هذه المكتبة. والحقيقة أن هذه نقطة قوّة يراها المبرمجون بالمكتبة: يمكنها أن تعمل على عدد كبير جدًا من أنظمة التشغيل، فعلى غرار
\textenglish{Windows}،
\textenglish{\mbox{Mac OS X}}
و
\textenglish{\mbox{GNU/Linux}}،
فهي تشتغل أيضًا على
\textenglish{Atari}، \textenglish{Amiga}، \textenglish{Symbian}، \textenglish{Dreamcast}\dots
إلخ. أي أنه بالإمكان لبرامجك أن تعمل حتى على أجهزة
\textenglish{Atari}
القديمة! مع ذلك يجب القيام ببعض التعديلات وربّما استخدام مترجم خاص. لن أدخل في التفاصيل هنا.
\item أخيرا، فإن هذه المكتبة تسمح لك بالقيام بالكثير من
\textbf{الأمور الممتعة}
التي سنتعرّف إليها من خلال الفصول القادمة. لا أقول أنّ مكتبة رياضيّاتيّة قادرة على حلّ معادلات من الدرجة الرابعة ليست ممتعة، لكنّي سأركّز على أن يكون هذا الدرس سهلا قدر الإمكان لكيّ يحثّك على البرمجة.
\end{itemize}
هذه المكتبة ليست مخصصة فقط لإنشاء ألعاب الفيديو. سأعترف بأن معظم البرامج التي تمت كتابتها بهذه المكتبة، هي عبارة عن ألعاب، لكن هذا لا يعني أنك مجبر لاستعمالها من أجل ذلك. كما نعلم، كلّ شيء ممكن بالعمل والاجتهاد. كنت قد رأيت من قبل محرر نصوص تمت برمجته بالـ\textenglish{SDL}،
على الرغم من أنّه هناك مكتبات أخرى أحسن لهذا الغرض. إن كنت تريد برمجة واجهة رسومية تقليديّة تسمح بإظهار نافذة، زر، قائمة، إلخ. فأنا أنصحك إذا بالتوجّه إلى المكتبة
\textenglish{GTK+}.
\subsection{الإمكانيات المتاحة بـ\textenglish{SDL}}
المكتبة
\textenglish{SDL}
هي مكتبة منخفضة المستوى. هل تتذكر أول الكتاب حينما حدّثتك عن لغات البرمجة عالية المستوى ولغات البرمجة منخفضة المستوى؟ هذا ينطبق على المكتبات أيضًا.
\begin{itemize}
\item \textbf{المكتبات منخفضة المستوى}:
تحتوي على دوال قاعدية جدّا. يوجد عدد قليل من هذه الدوال لأنّه يمكننا القيام بكلّ شيء بها. وهذه الدوال لبساطتها تكون سريعة جدّا. لهذا فالبرامج المنشأة بهذا النوع من المكتبات تكون عادة الأسرع.
\item \textbf{المكتبات عالية المستوى}:
تحتوي على الكثير من الدوال التي تسمح بالقيام بالكثير من المهام. هذا يجعلها أبسط من ناحية الاستخدام.
لكن هذا النوع من المكتبات يكون عادة "كبيرا"، وليس من السهل دراستها ومعرفتها بأكملها. كما أنها قد تكون أثقل من المكتبات منخفضة المستوى (لكنّ هذا قد لا يكون واضحا).
\end{itemize}
على العموم، لا يمكننا القول بأن "مكتبة منخفضة المستوى هي أحسن من مكتبة عالية المستوى" أو العكس. فكلّ منهما لها مميزات ومساوئ. الـ\textenglish{SDL}
التي سنقوم بدراستها، تنتمي إلى المكتبات منخفضة المستوى.
يجب إذا أن تتذكر بأن الـ\textenglish{SDL}
تقدّم دوالا قاعدية. يمكنك إذا الرسم بيكسلا ببيكسل، رسم مستطيل أو إظهار صور. هذا كلّ شيء، وصدّقني أنّ هذا كافٍ.
\begin{itemize}
\item بتحريك صورة، يمكنك أن تقوم بتحريك شخصيّة.
\item بإظهار العديد من الصور الواحدة تلو الأخرى بسرعة، يمكنك إنشاء تحريك
(\textenglish{Animation}).
\item بوضع العديد من الصور، الواحدة بجنب الأخرى، يكون باستطاعتك إنشاء لعبة حقيقيّة.
\end{itemize}
كمثال عن لعبة تم صنعها بالـ\textenglish{SDL}،
اعلم أنّ اللعبة الشهيرة
"\textenglish{Civilisation: Call to power}"،
تم دعمها في نظام
\textenglish{GNU/Linux}
لاحقًا باستخدام \textenglish{SDL}.
\begin{figure}[H]
\centering
\includegraphics[width=0.5\textwidth]{Chapter_III-1_Game}
\end{figure}
يجب أن تعلم أنّ جودة اللعبة تعود إليك وإلى الفريق الذي تعمل معه. إن كان لديك مصمم موهوب، فيمكنك صنع لعبة أجمل.
الشيء الوحيد الذي يحدّ \textenglish{SDL}
هو أنها تقتصر على الألعاب ثنائية الأبعاد، ولم تُنشأ من أجل الألعاب ثلاثية الأبعاد. هذه أمثلة على ألعاب يمكن تحقيقها بـ\textenglish{SDL}
(ليست سوى قائمة صغيرة، كلّ شيء ممكن مادام ثنائيّ الأبعاد):
\begin{itemize}
\item \textenglish{Breakout}
\item \textenglish{Bomberman}
\item \textenglish{Tetris}
\item ألعاب المنصّات:
\textenglish{Super Mario Bros}، \textenglish{Sonic}، \textenglish{Rayman}،\dots
\item \textenglish{RPG} ثنائية الأبعاد:
\textenglish{Zelda}،
الأجزاء الأولى للعبة
\textenglish{Final Fantasy}،
إلخ.
\end{itemize}
لا يمكن وضع لائحة كاملة، الأمر يعود فقط للقدرة على التخيّل. وصدّقني بأنك قادر على برمجة ألعاب فائقة الروعة. فلقد رأيت أحد القرّاء ينشئ تهجينا بين
\textenglish{Breakout}
و
\textenglish{Tetris}.
فلنعد إلى الأرض ولنمسك خيط هذا الفصل. سنقوم الآن بتسطيب المكتبة، لنتمكّن من التقدّم في العمل.
\section{تنزيل \textenglish{SDL}}
الموقع الرسمي للمكتبة
\textenglish{SDL}
سيصبح قريبا الوجهة الّتي نقصدها كثيرا. هناك، يوجد كلّ ما تحتاجه، بدءً من المكتبة نفسها ومرورا إلى التوثيق
(\textenglish{Documentation})
الخاص بها.
\url{http://www.libsdl.org/}
اذهب إلى اللائحة
\textenglish{Download}
المتواجدة على يسار الصفحة الرئيسية للموقع.\\
اختر النسخة الأحدث الّتي تجدها
(\textenglish{SDL 1.2}
عندما كتبت هذه السطور).
صفحة التنزيل مجزّأة إلى عدة أجزاء.
\begin{itemize}
\item \textbf{الشفرة المصدرية}
(\textenglish{Source code}):
هنا يمكنك تحميل الشفرة المصدرية الخاصة بالمكتبة. أدري أن القراء فضوليون ليعرفوا كيف تعمل المكتبة من الداخل، لكنّ هذا لن يفيدنا. الأسوأ هو أنّه سيقوم بإلهائك عن هدفنا الرئيسي.
\item \textbf{مكتبات وقت التشغيل}
(\textenglish{Runtime libraries}):
هي الملفات التي تحتاج إلى تقديمها مع الملف التنفيذي حين تريد أن تعطي برنامجك لشخص آخر. بالنسبة لـ\textenglish{Windows}، أنا أتكلم عن الملف
\InlineCode{SDL.dll}.
هذا الأخير يجدر به أن يتواجد إما:
\begin{itemize}
\item بنفس المجلّد الذي يحتوي الملف التنفيذي
(أنا أنصحك بهذا). الأحسن دائما هو أن تعطي الـ\textenglish{DLL}
مع الملف التنفيذي وتبقيهم في نفس المجلد. إذا وضعت الـ\textenglish{DLL}
في المجلّد الخاص بـ\textenglish{Windows}، لن يكون عليك إلحاق الـ\textenglish{DLL}
مع كلّ مجلّد يحتوي البرنامج
\textenglish{SDL}.
ومع ذلك قد تحدث بعض المشاكل في حال ما قمت بمسح نسخة أحدث من الـ\textenglish{DLL}.
\item في المجلّد
\InlineCode{C:\textbackslash Windows}.
\end{itemize}
\item \textbf{مكتبات التطوير}
(\textenglish{Development libraries}):
هي الملفات
\InlineCode{.a}
(أو
\InlineCode{.lib}
بالنسبة لـ\textenglish{Visual})
والملفات
\InlineCode{.h}
التي تسمح بإنشاء برامجك
\textenglish{SDL}.
هذه الملفات ليست مفيدة إلا بالنسبة إليك أنت فقط المبرمج. أي أنه ليس عليك تقديمها مع ملفات البرنامج حين تنتهي من هذا الأخير.
\end{itemize}
إذا كنت تعمل في
\textenglish{Windows}،
فسأعطيك ثلاثة نسخ، وذلك حسب المترجم الخاص بك:
\begin{itemize}
\item \textenglish{VC6}:
بالنسبة للذين يستخدمون النسخ القديمة غير المجانية من
\textenglish{Visual studio}
(لا أعتقد أن هناك من القرّاء من لازال يستعمل هذه النسخ). ستجد فيها على أي حال الملفات
\InlineCode{.lib}.
\item \textenglish{VC8}:
بالنسبة للذين يستعملون
\textenglish{Visual Studio 2005 Express}
أو نسخة أحدث، ستجد فيها الملفات
\InlineCode{.lib}.
\item \textenglish{mingw32}:
بالنسبة للذين يستعملون
\textenglish{Code::Blocks}
(ستجدون فيها إذا الملفات
\InlineCode{.a}).
\end{itemize}
الشيء الخاص هنا، هو أن "مكتبات التطوير" تحتوي كل الملفات
\InlineCode{.h}
و الملفات
\InlineCode{.a}
(أو
\InlineCode{.lib})
بالطبع، لكنها تحتوي أيضًا الملف
\InlineCode{SDL.dll}
و ملفات التوثيق الخاصة بـ\textenglish{SDL}!\\
باختصار، كلّ ما عليك تنزيله هو "مكتبات التطوير"، فكلّ ما تحتاجه يتواجد بداخلها.
\begin{critical}
لا تخطئ في الرابط! قم باختيار \textenglish{SDL}
في قسم
"\textenglish{Development libraries}"
و ليس من قسم
"\textenglish{Source code}"!
\end{critical}
\begin{question}
ما هو التوثيق
(\textenglish{Documentation})؟
\end{question}
التوثيق هو قائمة تحوي اللائحة الكاملة للدوال الخاصة بمكتبة معيّنة. وكل هذه الملفات تكون مكتوبة بالانجليزية (حتى لو كان كاتبوها مبرمجين فرنسيين). هذا سبب آخر يدفعك للتقدّم في لغة
\textenglish{Shakespeare}!
محتوى ملفات التوثيق ليس عبارة عن درس، بل هي عادة موجزة. الشيء الإيجابي بالنسبة لدرس، هي أنّها تحتوي قائمة لكل الدوال الموجودة، فهي إذا المرجع للمبرمج.\\
في كثير من الأحيان ستجد مكتبات بدون دروس تشرح كيفية عملها. وهنا لا يبقى لك سوى التوثيق الّذي نسميه عادة
"\textenglish{doc}"،
و يجب عليك تدبّر أمرك بهذا فقط (حتّى لو كان هذا صعبا أحيانا عندما تبدأ من دون أيّة مساعدة). المبرمج الحقيقيّ هو من يتمكّن من إيجاد ضالّته في الـ"\textenglish{doc}".
لحدّ الآن، أنت لست بحاجة إلى التوثيق الخاص بـ\textenglish{SDL}
لأنني أنا من سيشرح لك كيفية عملها. لكن بما أنني غير قادر على أن أشرح لك كل الدوال التي بها، ستحتاج إلى قراءة التوثيق لاحقا.
ملفّات التوثيق توجد أصلًا في الحزمة
"\textenglish{Development libraries}"
كما سبق وذكرت، لكن بإمكانك تنزيلها وحدها من القائمة
\InlineCode{Documentation} / \InlineCode{Downloadable}.\\
أنصحك أن تجمع ملفات
\textenglish{HTML}
الخاصة بالتوثيق في مجلّد خاصّ (اسمه مثلًا
\InlineCode{Doc SDL})
ثم إنشاء اختصار إلى الفهرس
\InlineCode{index.html}.
و الهدف من هذا هو الوصول إلى هذه الملفات بشكل أسرع حينما تحتاج إليها.
\section{إنشاء مشروع \textenglish{SDL}: \textenglish{Windows}}
تثبيت مكتبة قد يكون أكثر صعوبة قليلًا مما تعوّد عليه الجميع. هنا لا يوجد تثبيت تلقائيّ يطلب منك أن تنقر "التالي"، "التالي"، "التالي"، "انتهى".
الحقيقة أن تثبيت مكتبة أمر صعب على المبتدئين. لكن لأقوم برفع المعنويات فإن تسطيب مكتبة
\textenglish{SDL}
أمر سهل جدًا مقارنة بتسطيب مكتبات أخرى أتيحت ليّ فرصة استخدامها من قبل (هناك من يتم إعطاؤك منها الشفرة المصدرية فقط، بينما أنت تتولى أمر الترجمة!).
و الحقيقة أن كلمة "تثبيت" ليست الملائمة هنا. لن نقوم بتثبيت أي شيء، فقط نريد أن نصل إلى الكيفية التي ننشئ فيها مشروع
\textenglish{SDL}
في البيئة التطويرية الخاصة بنا.\\
ستختلف كيفية التعامل حسب البيئة التطويرية التي تستعملها. سأقوم بتقديم الطريقة الخاصة بكلّ بيئة من بيئات التطوير التي قدّمتها في بداية الكتاب، وهكذا كي يستطيع الجميع المتابعة.
سأعرض الآن كيف ننشئ مشروع
\textenglish{SDL}
في كلّ واحد من البيئات الثلاث السابقة.
\subsection{تسطيب \textenglish{SDL} في \textenglish{Code::Blocks}}
\subsubsection{استخراج ملفات \textenglish{SDL}}
افتح الملف المضغوط
"\textenglish{Development Libraries}"
الذي قمت بتنزيله.\\
هذا الملف هو بامتداد
\InlineCode{.zip}
بالنسبة لـ\textenglish{Visual}
و
\InlineCode{.tar.gz}
بالنسبة لـ\textenglish{mingw32}
(يلزمك برنامج مثل
\textenglish{Winrar}
أو
\textenglish{7-Zip}
لكي تقوم بفك الضغط عن الملفات ذات الصيغة
\InlineCode{.tar.gz}).
الملف المضغوط يحتوي العديد من المجلّدات الداخلية، وهذه هي الملفات التي تهمّنا:
\begin{itemize}
\item \InlineCode{bin}:
يحتوي الملف
\InlineCode{.dll}
الخاص بـ\textenglish{SDL}.
\item \InlineCode{docs}:
يحتوي الملفات التوثيقيّة الخاصة بـ\textenglish{SDL}.
\item \InlineCode{include}:
يحتوي الملفات الرأسية
\InlineCode{.h}.
\item \InlineCode{lib}:
يحتوي الملفات
\InlineCode{.lib}
(أو
\InlineCode{.a}
بالنسبة لـ\textenglish{Code::Blocks})
\end{itemize}
يجب عليك استخراج كل الملفات والمجلّدات الداخلية ووضعها في مكان ما بالقرص الصلب لحاسوبك، يمكنك مثلا وضعها في مجلد خاص بـ\textenglish{SDL}
داخل مجلّد \textenglish{Code::Blocks}.
\begin{figure}[H]
\centering
\includegraphics[width=0.6\textwidth]{Chapter_III-1_SDL-folder}
\end{figure}
بالنسبة لي فإن المسار هو التالي:
\InlineCode{C:\textbackslash Program Files (x86)\textbackslash CodeBlocks\textbackslash SDL-1.2.13}
احفظ المسار الذي به البرنامج، ستحتاج إليه عندما تريد تعديل إعدادات
\textenglish{Code::Blocks}
لاحقا.
والآن، علينا بالقيام بخطوة بسيطة، لتسهيل الأمور علينا، توجّه إلى المسار
\InlineCode{include/SDL}
(في حالتي، هو متواجد\\
بـ\InlineCode{C:\textbackslash Program Files (x86)\textbackslash CodeBlocks\textbackslash SDL-1.2.13\textbackslash include\textbackslash SDL})،
قم بنسخ الملفات الرأسية
\InlineCode{.h}
في المجلّد الأب، (أي في:
\InlineCode{C:\textbackslash Program Files (x86)\textbackslash CodeBlocks\textbackslash SDL-1.2.13\textbackslash include}).
\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{Chapter_III-1_SDL-h-copy}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{Chapter_III-1_SDL-h-past}
\end{figure}
ها قد تم تسطيب المكتبة، فلنقم الآن بتعديل إعدادات
\textenglish{Code::Blocks}.
\subsubsection{إنشاء مشروع \textenglish{SDL}}
افتح
\textenglish{Code::Blocks}
و قم بإنشاء مشروع جديد.
\begin{figure}[H]
\centering
\includegraphics[width=0.6\textwidth]{Chapter_III-1_CodeBlocks-New-Project}
\end{figure}
عوض أن تقوم باختيار
\textenglish{Console Application}
كما جرت العادة، اختر
\textenglish{SDL project}.
\begin{figure}[H]
\centering
\includegraphics[width=0.6\textwidth]{Chapter_III-1_SDL-Project}
\end{figure}
النافذة الأولى لا جدوى منها، قم بتجاوزها بالضغط على "التالي"
(\textenglish{Next}).
\begin{figure}[H]
\centering
\includegraphics[width=0.6\textwidth]{Chapter_III-1_SDL-Project-Welcome}
\end{figure}
سيُطلب منك أن تقوم بإدخال اسم المشروع، قم بذلك كالعادة:
\begin{figure}[H]
\centering
\includegraphics[width=0.6\textwidth]{Chapter_III-1_SDL-Project-path}
\end{figure}
الآن يجب اختيار المسار الذي ثبتنا فيه المكتبة:
\begin{figure}[H]
\centering
\includegraphics[width=0.6\textwidth]{Chapter_III-1_SDL-path}
\end{figure}
اضغط على الزر الذي يأخذ شكل مربّع به ثلاث نقاط، ستظهر لك النافذة التالية:
\begin{figure}[H]
\centering
\includegraphics[width=0.3\textwidth]{Chapter_III-1_SDL-path-select}
\end{figure}
قم باختيار المسار (بالنسبة لي هو
\InlineCode{C:\textbackslash Program Files (x86)\textbackslash CodeBlocks\textbackslash SDL-1.2.13}).
قد تظهر لك في مكان النافذة السابقة هذه النافذة:
\begin{figure}[H]
\centering
\includegraphics[width=0.55\textwidth]{Chapter_III-1_SDL-path-select-2}
\end{figure}
املأ الحقل
\textenglish{base}
بنفس الطريقة السابقة، ثمّ اضغط على زر الخروج، وستلاحظ أن المسار قد تم تسجيله كالتالي:
\begin{figure}[H]
\centering
\includegraphics[width=0.6\textwidth]{Chapter_III-1_SDL-path-filled}
\end{figure}
اضغط على
\textenglish{Next}،
ستظهر لك نافذة اختيار المترجم، قم باختيار الأوضاع
\textenglish{Realease}
أو
\textenglish{Debug}
(هذا لا يهم).
أخيرا اضغط على "إنهاء"
(\textenglish{Finish}).
سيتم إنشاء المشروع التجريبي:
\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{Chapter_III-1_SDL-test-project}
\end{figure}
يحتوي المشروع على ملفين
\InlineCode{main.cpp}
و ملف
\InlineCode{.bmp}
قبل أن تحاول القيام بالترجمة. يجب القيام بخطوة أخيرة (عليك القيام بها دائما)، وهي نسخ الملف
\InlineCode{SDL.dll}
من ملفات المكتبة (الّذي يفترض أن يكون في المسار
\InlineCode{C:\textbackslash Program Files (x86)\textbackslash CodeBlocks\textbackslash SDL-1.2.13\textbackslash bin\textbackslash SDL.dll})
و ضعه في المجلّد الخاص بالمشروع.
\begin{figure}[H]
\centering
\includegraphics[width=0.7\textwidth]{Chapter_III-1_SDL-DLL-copy}
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=0.7\textwidth]{Chapter_III-1_SDL-DLL-past}
\end{figure}
أخرج من
\textenglish{Code::Blocks}
و أعد الدخول إليه، ثم قم بترجمة البرنامج المُقترح مسبقًا. يفترض أن تظهر النافذة التالية:
\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{Chapter_III-1_SDL-test-window}
\end{figure}
إذا ظهرت لك النافذة السابقة، فهنيئا لك، المكتبة مثبتة بشكل جيد!
\begin{information}
إن ظهرت لك الرسالة
"\textenglish{The application can't start because the file SDL.dll is missing}"
أي أنه لا يمكن تشغيل البرنامج، لأن ملف
\InlineCode{SDL.dll}
غير موجود، فهذا يعني أنك لم تقم بنسخ الملف الأخير في ملفات المشروع كما طلبت منك!\\
و كما قلت، إن كنت تريد تسليم المشروع إلى أصدقائك، عليك بإرفاق الملف التنفيذي
\InlineCode{.exe}
بالملف
\InlineCode{SDL.dll}،
بينما أنت لست بحاجة إلى إعطائهم الملفات
\InlineCode{.h}
و
\InlineCode{.a}
الّتي لا تهم أحدا سواك.
\end{information}
\begin{tcolorbox}[breakable,title=ملاحظات مترجمة الكتاب, colback=orange!20, colframe=orange!70, fontupper=\footnotesize, coltitle=white, fonttitle=\normalsize, attach title]
كلّ الشرح الموجود في هذا الجزء يعطي الطريقة الّتي استخدمتها مترجمة الكتاب لتشغيل البرنامج في حالة ما لم تعمل الطريقة السابقة (الأصليّة). هذا يعني أنّ هذه الفقرات التالية ليست موجودة في الكتاب الفرنسي الأصلي، وإنّما هي مساهمة شخصيّة من المترجمة.
\tcblower
إن لم يشتغل البرنامج ولازال المترجم يشير دائما إلى عدم وجود الملف
\InlineCode{SDL.dll}،
فجرب نسخ هذا الأخير ولصقه في المجلدين
\textenglish{Debug}
و
\textenglish{Release}
من مجلّد المشروع، أي في نفس المكان الذي يتواجد به الملف التنفيذي.
أريد أن أنوّهك بأن المشروع الذي تم إنشاءه هو خاص باللغة
\textenglish{C++}
(لأنها اللغة التي يتم اختيارها تلقائيا من بيئة التطوير، كون أن هذه الأخيرة تم تطويرها للعمل بلغة \textenglish{C++})،
سنقوم إذا بتحويل هذا المشروع من
\textenglish{C++}
إلى
\textenglish{C}
ببساطة.\\
توجّه إلى ملفات المشروع، ستجد الملف
\InlineCode{main.cpp}
قم بتغيير اسمه إلى
\InlineCode{main.c}.
\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{Chapter_III-1_SDL-rename}
\end{figure}
أدخل الآن إلى
\textenglish{Code::Blocks}،
ستظهر لك على الأرجح النافذة التالية:
\begin{figure}[H]
\centering
\includegraphics[width=0.5\textwidth]{Chapter_III-1_SDL-keep-open}
\end{figure}
اضغط على الزر "لا"
(\textenglish{No}).
توجه إلى القائمة اليسارية، وقم بالنقر باليمين على الملف
\InlineCode{main.cpp}
و اختر حذفه من المشروع:
\begin{figure}[H]
\centering
\includegraphics[width=0.3\textwidth]{Chapter_III-1_SDL-remove-cpp}
\end{figure}
اضغط على اسم المشروع، واطلب إضافة ملف جديد:
\begin{figure}[H]
\centering
\includegraphics[width=0.3\textwidth]{Chapter_III-1_SDL-add}
\end{figure}
اختر الملف
\InlineCode{main.c}
من ملفات المشروع:
\begin{figure}[H]
\centering
\includegraphics[width=0.6\textwidth]{Chapter_III-1_SDL-mainc}
\end{figure}
ستظهر لك نافذة أخرى، قم باختيار
\textenglish{Next}،
ثم انقر على "موافق"
(\textenglish{OK}).
\begin{figure}[H]
\centering
\includegraphics[width=0.4\textwidth]{Chapter_III-1_SDL-selection}
\end{figure}
أنقر باليمين مجددا على الملف
\InlineCode{main.c}
و اختر "خصائص"
(\textenglish{Properties}):
\begin{figure}[H]
\centering
\includegraphics[width=0.4\textwidth]{Chapter_III-1_SDL-file-properties}
\end{figure}
توجه إلى القائمة
\textenglish{Advanced}،
ستجد
\textenglish{Compiler variable}،
غيّرها من
\textenglish{CPP}
إلى
\textenglish{CC}
كالتالي:
\begin{figure}[H]
\centering
\includegraphics[width=0.5\textwidth]{Chapter_III-1_SDL-file-properties-advanced}
\end{figure}
اضغط بعد ذلك على
\textenglish{OK}
هذا ما سيبدو عليه المشروع الجديد:
\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{Chapter_III-1_SDL-new-file}
\end{figure}
ضع الشفرة التالية بدل الشفرة السابقة:
\begin{Csource}
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
int main(int argc, char *argv[])
{
SDL_Init(SDL_INIT_VIDEO);
SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);
return EXIT_SUCCESS;
}
\end{Csource}
و أخيرًا، من القائمة العلوية، اختر هدف البناء
\InlineCode{Release}.
\begin{figure}[H]
\centering
\includegraphics[width=0.3\textwidth]{Chapter_III-1_SDL-build-target}
\end{figure}
يمكنك ترجمة البرنامج، ستظهر لك نافذة وتختفي فجأة، لا تقلق، سنعالج ذلك لاحقًا، أنا أهنّئك، كل شيء يعمل بشكل جيد جدا.
\end{tcolorbox}
يمكنك مسح الملف
\InlineCode{.bmp}
لأننا لسنا بحاجة إليه. بالنسبة للملف
\InlineCode{main.c}،
يمكنك الآن استبدال محتواه بالشفرة التالية:
\begin{Csource}
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
int main(int argc, char *argv[])
{
return 0;
}
\end{Csource}
إنها شفرة مبدئية، تشبه الشفرات التي تعوّدنا عليها (تضمين
\InlineCode{stdlib.h}
و
\InlineCode{stdio.h}
ثم
\InlineCode{main}).
الشيء الوحيد الذي تغيّر هو تضمين الملف
\InlineCode{SDL.h}.
إنّه ملف رأسيّ يتكفل بتضمين كل الملفات الرأسية الخاصة بالمكتبة
\textenglish{SDL}.
\subsection{إنشاء مشروع \textenglish{SDL} في \textenglish{Visual C++}}
\subsubsection{استخراج ملفات \textenglish{SDL}}
من الموقع الرسمي، قم بتنزيل آخر نسخة من المكتبة من قسم
"\textenglish{Development Libraries}"
و اختر نسخة
\textenglish{Visual C++ 2005 Service Pack 1}.
افتح الملف
\InlineCode{.zip}.\\
إنه يحتوي على التوثيق (في المجلد
\InlineCode{docs})،
الملفات
\InlineCode{.h}
(في المجلد
\InlineCode{include})،
و الملفات
\InlineCode{.lib}
(في المجّلد
\InlineCode{lib})
المكافئة للملفات
\InlineCode{.a}
بالنسبة لمترجم
\textenglish{Visual}.
ستجد أيضًا الملف
\InlineCode{SDL.dll}
في المجلّد
\InlineCode{lib}.
\begin{itemize}
\item انسخ الملف
\InlineCode{SDL.dll}
إلى مجلّد المشروع.
\item انسخ الملفات
\InlineCode{.lib}
إلى المجلّد
\InlineCode{lib}
الخاص بـ\textenglish{Visual C++}.
بالنسبة لي، أنا أتكلم عن المجلّد
\InlineCode{C:\textbackslash Program Files (x86)\textbackslash Microsoft Visual Studio 8\textbackslash VC\textbackslash lib}.
\item انسخ الملفات
\InlineCode{.h}
إلى المجلّد
\InlineCode{includes}
الخاص بـ\textenglish{Visual C++}.
أنشئ مجلّدا
\InlineCode{SDL}
في المجلد
\InlineCode{includes}
لجمع الملفات
\InlineCode{.h}
الخاصة بـ\textenglish{SDL}
فيه. بالنسبة لي، سأضع تلك الملفات في المجلد:
\InlineCode{C:\textbackslash Program Files (x86)\textbackslash Microsoft Visual Studio 8\textbackslash VC\textbackslash include\textbackslash SDL}.
\end{itemize}
\subsubsection{إنشاء \textenglish{SDL} مشروع جديد}
في \textenglish{Visual C++}
أنشئ مشروعًا من نوع
\textenglish{Application console Win32}.
سمّه مثلًا
\InlineCode{testsdl}
ثم اضغط على "موافق".
ستفتح نافذة مساعدة. توجه إلى
\textenglish{Application parameters}
و تأكد من أن الخانة
\InlineCode{Empty project}
مختارة.
\begin{figure}[H]
\centering
\includegraphics[width=0.6\textwidth]{Chapter_III-1_VisualCpp-Assistant}
\end{figure}
لقد تمّ إنشاء المشروع إذا. إنّه فارغ. أضف إليه ملفًا جديدًا وذلك بالنقر على
\InlineCode{Source files}
ثم
\InlineCode{Add}
ثم
\InlineCode{New element}:
\begin{figure}[H]
\centering
\includegraphics[width=0.4\textwidth]{Chapter_III-1_VisualCpp-Add}
\end{figure}
حينما تفتح نافذة جديدة، أطلب إنشاء ملف جديد من نوع
\InlineCode{C++ File (.cpp)}،
قم بتسميته
\InlineCode{main.c}.
بوضعك للامتداد
\InlineCode{.c}
فإن \textenglish{Visual}
سيقوم بإنشاء ملف
\textenglish{C}
و ليس
\textenglish{C++}.
أكتب (أو انسخ/ألصِق) الشفرة المبدئية الذي وضعتها أعلاه، في الملف الجديد الذي أنشأته.
\subsubsection{تخصيص مشروع \textenglish{SDL} في \textenglish{Visual C++}}
التعديل على المشروع أصعب قليلًا مما هو الحال مع \textenglish{Code::Blocks}،
لكن بقليل من التركيز، ستتمكن من فعله. توجّه إلى خصائص المشروع من
\InlineCode{Project} / \InlineCode{testsdl properties}.
\begin{itemize}
\item في القسم
\InlineCode{C / C++} / \InlineCode{Code generation}
عدّل قيمة \InlineCode{Runtime Libraries}
إلى\\
\InlineCode{DLL multithread (/MD)}.
\item في القسم
\InlineCode{C / C++} / \InlineCode{Advanced}
اختر
\InlineCode{Compilation as}
وضع القيمة\\
\InlineCode{Compile as C code (/TC)}
(وإلا فإن
\textenglish{Visual}
سيترجم البرنامج كأنه ملف
\textenglish{C++}
وليس كملف
\textenglish{C}).
\item في القسم
\InlineCode{Link editor} / \InlineCode{Input}
عدّل قيمة الـ\InlineCode{Additional dependencies}
لكي تضيف
\InlineCode{SDL.lib}
و
\InlineCode{SDLmain.lib}.
\item في القسم
\InlineCode{Link editor} / \InlineCode{System}
عدّل قيمة الـ\InlineCode{Sub-System}
إلى \InlineCode{Windows}.
\end{itemize}
\begin{figure}[H]
\centering
\includegraphics[width=0.6\textwidth]{Chapter_III-1_VisualCpp-project-properties}
\end{figure}
قم بالضغط على "موافق" لحفظ التغييرات.\\
يمكنك الآن الترجمة وذلك بالذهاب إلى
\InlineCode{Generate}
ثم
\InlineCode{Generate solution}.
ستجد الملف التنفيذي الذي يتواجد بمجلد المشروع (أو بمجلد داخلي يسمى
\InlineCode{Debug})
و لا تنس أنه على الملف
\InlineCode{SDL.dll}
أن يتواجد في نفس المجلّد الذي يتواجد به الملف التنفيذي. أنقر مرّتين على
\InlineCode{.exe}،
إذا سار كلّ شيء على ما يرام، فلن يحصل أيّ شيء، وإلّا فسيحدث خطأ إذا لم يكن الملف
\InlineCode{SDL.dll}
في نفس المجلّد.
\section{إنشاء مشروع \textenglish{SDL}: \textenglish{Mac OS} (\textenglish{Xcode})}
فلتقم بتنزيل النسخة 1.2 من \textenglish{SDL}،
و ذلك من خلال الجزء
"\textenglish{Download}"
أسفل يسار الموقع، كالتالي:
\begin{figure}[H]
\centering
\includegraphics[width=0.2\textwidth]{Chapter_III-1_SDL-Mac-Download}
\end{figure}
في أسفل الصفحة ستجد قسمًا يدعى
"\textenglish{Runtime Libraries}".
نزّل الملف الذي يتناسب مع هندسة معالج جهازك
(\textenglish{Intel} أو \textenglish{PowerPC})،
هذا ما ستوضحه الصورة الموالية. إن كنت تريد معرفة هندسة المعالج، يمكنك الذهاب إلى القائمة
"\textenglish{Apple}"
في أعلى اليسار، والنقر على
"\textenglish{About this Mac}".
في السطر
"\textenglish{Processor}"
ستجد إما
\textenglish{Intel} أو \textenglish{PowerPC}.
\begin{figure}[H]
\centering
\includegraphics[width=0.4\textwidth]{Chapter_III-1_SDL-Mac-Download-version}
\end{figure}
حينما يتم تنزيل الملف، انقر عليه مرتين، يفترض أن يفتح لوحده. ستجد بهذا المجلّد مجلّدا
\InlineCode{SDL.framework}
قم بنسخه ولصقه في المجلد
\InlineCode{/Library/Frameworks}.
انتهى، المكتبة مسطّبة الآن!\\
ستجد مجلّدا آخر اسمه
\InlineCode{devel-lite}
أتركه مفتوحا، سنعود إليه لاحقًا.
الآن قم بإنشاء مشروع جديد
"\textenglish{Cocoa Application}"،
اضغط على
"\textenglish{Next}".
في
\InlineCode{Product Name}
قم بتسمية المشروع (كـ"\textenglish{SDL}"
مثلًا). وفي
\InlineCode{Company Identifier}،
ضع ما تريد (كاسم مستعار لك مثلا). اترك الباقي كما هو ثم اضغط على
"\textenglish{Next}".
اختر أين تريد وضع المشروع. سيتم إنشاء مجلّد بطريقة تلقائية وليس عليك إنشاء واحد بنفسك ووضع ملفات المشروع بداخله.
ما إن يتم إنشاء المشروع، قم بالتخلص من الملفات التي لا تحتاجها:
\InlineCode{AppDelegate.h}، \InlineCode{AppDelegate.m}، \InlineCode{MainMenu.xib}، \InlineCode{InfoPlist.strings}، \InlineCode{main.m} و\InlineCode{Credits.rtf}:
\begin{figure}[H]
\centering
\includegraphics[width=0.4\textwidth]{Chapter_III-1_SDL-project-unused-files}
\end{figure}
اختر المشروع من التفرع الشجري اليساري (القسم
\InlineCode{Install SDL}
من الصورة الموالية) في الشجرة الثانية اختر اسم مشروعك من قسم
\InlineCode{PROJECT}
و ليس من
\InlineCode{TARGETS}:
\begin{figure}[H]
\centering
\includegraphics[width=0.2\textwidth]{Chapter_III-1_Xcode-SDL-project}
\end{figure}
يمكنك أيضًا تغيير الـ\textenglish{localisation}
من
\InlineCode{English}
إلى
\InlineCode{French}.
اختر
\InlineCode{English}،
أنقر على
\InlineCode{-}
للمسح وعلى
\InlineCode{+}
لإضافة
\InlineCode{French}،
هذا يعود إليك ولست مضطرًا للقيام بذلك.
سنقوم الآن بتخصيص المشروع على نظام
\textenglish{32 bits}
( لأن المكتبة لا تشتغل على أنظمة
\textenglish{64 bits})،
و سنقوم بإضافة المسارات من أجل الـ\textenglish{frameworks}،
و للملفات الرأسية أيضًا. اضغط على
\InlineCode{Build Settings}
ثم
\InlineCode{All}
ثم في
\InlineCode{Architectures}
انقر على
\InlineCode{64-bit Intel}
واختر
\InlineCode{32-bit Intel}:
\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{Chapter_III-1_Xcode-SDL-build-setting}
\end{figure}
ما إن تفعل ذلك، اختر
\InlineCode{LLVM GCC 4.2}
من السطر
\InlineCode{Compiler for C/C++/Objective-C}.
\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{Chapter_III-1_Xcode-gcc}
\end{figure}
اذهب إلى منطقة البحث في أعلى اليمين، واكتب
"\textenglish{search paths}"،
يجدر بك أن تجد سطرين مهمّين بالنسبة لنا وهما
\InlineCode{Header search paths}
و
\InlineCode{Framework search paths}.
انقر مرتين على الجهة اليمنى للسطر